如何在窗口中重绘 Qt 窗口或 tabview

Posted

技术标签:

【中文标题】如何在窗口中重绘 Qt 窗口或 tabview【英文标题】:How to repaint Qt window or tabview in window 【发布时间】:2015-08-11 02:16:40 【问题描述】:

我想点击一个按钮,然后弹出一个对话框。 Dialog 来自 Qml,有一个标签,该标签由另一个 javascript 文件中的变量号组成。当变量改变时,对话框应该重新绘制,新的数字将显示在对话框上。

MyDlg.qml:

import "MyJs.js" as MyJs

Window 

    id: myDialog
    width: 300
    height: 300

    TabView 
        id:myTabView
        width: parent.width
        height: parent.height

        Tab 
            title: "tab 1"
            id: myTab1
            text: MyJs.displayText
            
     

MyJs.js:

var displayText = "0";

【问题讨论】:

【参考方案1】:

绑定在 QML 和单独的 JavaScript 文件之间不起作用,只有 inline JavaScript expressions。我找不到任何明确说明这一点的文档,但在 previous answers 中也提到过。

如果您不想步入 C++,请使用 QML 单例 (another answer to that question)。以下是您如何使用它的示例:

MyDialog.qml

import QtQuick 2.0
import QtQuick.Controls 1.0
import QtQuick.Window 2.0

import "."

Window 
    id: myDialog
    width: 300
    height: 300


    TabView 
        id:myTabView
        width: parent.width
        height: parent.height

        Tab 
            title: MySingleton.displayText
            id: myTab1

            Button 
                text: "Click to change singleton property"
                onClicked: MySingleton.displayText = "Hello"
            
        
    

MySingleton.qml

pragma Singleton

import QtQml 2.0

QtObject 
    property string displayText: ""

qmldir

singleton MySingleton MySingleton.qml

更多信息:

http://doc.qt.io/qt-5/qqmlengine.html#qmlRegisterSingletonType-3 http://doc.qt.io/qt-5/qtqml-modules-qmldir.html#contents-of-a-module-definition-qmldir-file

【讨论】:

以上是关于如何在窗口中重绘 Qt 窗口或 tabview的主要内容,如果未能解决你的问题,请参考以下文章

Java - 从单独的组件中重绘组件

无法在 Qt 应用程序中重绘 matplot

Qt中重绘制窗口方法:

qt按钮边框的问题

如何在 SWIFT 中重绘我的视图?

单击时如何在新选项卡或(新窗口)中重定向超链接?