QML MessageDialog未正确显示

时间:2018-02-28 14:53:37

标签: qt qml messagedialog

我正在使用QT5.7.1,并且使用QML定义UI。我们的应用程序用于控制仪器并以自助服务终端模式运行。

我正在尝试使用MessageDialog元素在出现某些情况时通知操作员,例如电池电量不足,磁盘空间不足等......

MessageDialog在我的main.qml中声明,并在c ++方法发出信号(notifyOperator)时打开。

我在main.qml(onNotifyOperator)中定义了一个槽/函数来处理信号。这两个连接在我的应用程序的main()函数中 (类似于示例inhttps://andrew-jones.com/blog/qml2-to-c-and-back-again-with-signals-and-slots/)。我尝试使用QML Connections元素 使用以下编译错误连接信号和插槽:无效的附加对象分配。我仍然不明白这个,但我想在以后解决这个问题。

我还发现了一条评论,指出在打开Dialog之前进行属性更改是绝对必要的,即处于关闭状态。 (MessageDialog - text change from c++ but no update on screen) 如果我想在已经打开的MessageDialog中更改内容,我必须关闭它,更改属性然后再次打开它。这还不够 更改属性然后关闭并重新打开(如“重绘”)。这就是onNotifyOperator(),在属性更改后打开MessageDialog()。 更令人不安的是,我没有更改MessageDialog的属性,仍然得不到元素的不完整显示。

文件main.qml包含以下声明:

QtObject {
    property real defaultSpacing: 10
    property SystemPalette palette: SystemPalette { }

    //
    // scale factors dynamically computed
    //
    property double horizScaleFactor : Screen.width / 1280.0;
    property double vertScaleFactor : Screen.height / 800.0;

    property var splashWindow: Splash {
        onTimeout:
        {
            console.log( "Splash timeout: ...)

            ...
            controlWindow.visible = true
       }
    }

    property var controlWindow: Window {
        id: mainWindow
        objectName: "mainWindow"

        // this function is our QML slot; used to open a MessageDialog to notify the operator
        function notifyOperator()
        {
            console.log( "notifyOperator slot")
            myMessageDialog.open()
        }
 ...
 }

MessageDialog声明如下(controlWindow的一部分):

MessageDialog {
    id: myMessageDialog

    modality: Qt.WindowModal
    icon : StandardIcon.Warning
    standardButtons: StandardButton.Ok

    title: qsTr( "Power Adapter Status")
    text: qsTr( "Please disconnect the dock power adapter")

    onAccepted: {
        console.log( "messageDialog accepted() ")
    }

    Component.onCompleted: {
        console.log( "messageDialog.Component.onCompleted(); visible: ", visible)
        console.log( "messageDialog.Component.onCompleted(); title: ", title)
        console.log( "messageDialog.Component.onCompleted(); text: ", text)
    }
    onVisibilityChanged: {
        console.log( "messageDialog.onVisibilityChanged(); visible: ", visible)
        console.log( "messageDialog.onVisibilityChanged(); title: ", title)
        console.log( "messageDialog.onVisibilityChanged(); text: ", text)
    }
}

“应用程序输出”选项卡中显示的消息包括:

Starting U:\gitMaster\build-cad-detx-Desktop_Qt_5_7_1_MinGW_32bit-Debug\debug\cadx-gui.exe...

qml: messageDialog.Component.onCompleted(); visible:  false
qml: messageDialog.Component.onCompleted(); title:  Power Adapter Status
qml: messageDialog.Component.onCompleted(); text:  Please disconnect the dock power adapter

...
qml: notifyOperator slot
qml: messageDialog.onVisibilityChanged(); visible:  true
qml: messageDialog.onVisibilityChanged(); title:  Power Adapter Status
qml: messageDialog.onVisibilityChanged(); text:  Please disconnect the dock power adapter
The program has unexpectedly finished.

最后,我附上了MessageDialog的截屏 [MessageDialog截屏1

正如我所指出的,即使标题和文本元素是固定的,MessageDialog也是不正确的。有什么建议? 另外,如何摆脱标题栏中的问号?

此致 丹尼尔

0 个答案:

没有答案