Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt 接受/拒绝未捕获对话框的信号_Qt_Qml_Qt5_Qtquickcontrols2 - Fatal编程技术网

Qt 接受/拒绝未捕获对话框的信号

Qt 接受/拒绝未捕获对话框的信号,qt,qml,qt5,qtquickcontrols2,Qt,Qml,Qt5,Qtquickcontrols2,将Qt升级到v5.10.1该对话框不会发出接受/拒绝信号。上一个已知的运行平稳的版本是5.10.0。我的问题是——我是否遗漏了一些东西,或者我以错误的方式使用了某些组件?或者是回归(我会报告它?) macOS 10.12+和Win10上转载的问题(VC 2015/2017) 简化源代码示例: CMakeLists.txt cmake_minimum_required(VERSION 3.11) project(bug-test LANGUAGES CXX) set(CMAKE_INCLUDE_

将Qt升级到v5.10.1该对话框不会发出接受/拒绝信号。上一个已知的运行平稳的版本是5.10.0。我的问题是——我是否遗漏了一些东西,或者我以错误的方式使用了某些组件?或者是回归(我会报告它?)

macOS 10.12+和Win10上转载的问题(VC 2015/2017)

简化源代码示例:

CMakeLists.txt

cmake_minimum_required(VERSION 3.11)
project(bug-test LANGUAGES CXX)

set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

find_package(Qt5 COMPONENTS Core Quick REQUIRED)
add_executable(${PROJECT_NAME} "main.cpp" "qml.qrc")
target_link_libraries(${PROJECT_NAME} Qt5::Core Qt5::Quick)
main.cpp

#include <QGuiApplication>
#include <QQmlApplicationEngine>

int main(int argc, char *argv[])
{
    QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
    QGuiApplication app(argc, argv);
    QQmlApplicationEngine engine;
    engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
    if (engine.rootObjects().isEmpty()) return -1;
    return app.exec();
}
MsgDialog.qml

import QtQuick 2.9

MsgDialogForm {
    x: (parent.width - width) / 2
    y: (parent.height - height) / 2
    width: Math.min(applicationWindow.width, applicationWindow.height) / 5 * 4

    onAccepted: console.log("Ok clicked; save answer")
    onRejected: console.log("Cancel clicked; don't save")
}
MsgDialogForm.ui.qml

import QtQuick 2.9
import QtQuick.Controls 2.3

Dialog {
    id: dialog
    modal: true
    standardButtons: Dialog.Yes | Dialog.No
    closePolicy: Popup.CloseOnEscape
}
qml.qrc

<RCC>
    <qresource prefix="/">
        <file>main.qml</file>
        <file>qtquickcontrols2.conf</file>
        <file>MsgDialog.qml</file>
        <file>MsgDialogForm.ui.qml</file>
    </qresource>
</RCC>

main.qml
qtquickcontrols2.conf
MsgDialog.qml
MsgDialogForm.ui.qml

只需启动应用程序;按下按钮并单击其中一个对话框按钮。QtCreator控制台中未显示任何内容,但对话框已关闭。

当在
加载程序中建立新项目时,会从内存中删除上一个项目,在您的情况下,您是在关闭窗口时执行此操作的,但在关闭窗口后会发出接受或拒绝的信号

一种可能的解决方案是创建一个在接收到消息后发出的信号

MsgDialog.qml

import QtQuick 2.9

MsgDialogForm {
    signal finished()
    x: (parent.width - width) / 2
    y: (parent.height - height) / 2
    width: Math.min(applicationWindow.width, applicationWindow.height) / 5 * 4

    onAccepted: {
        console.log("Ok clicked; save answer")
        finished()
    }
    onRejected: {
        console.log("Cancel clicked; don't save")
        finished()
    }
}
...
Connections {
    target: dlgLoader.item
    onFinished: dlgLoader.source = ""
}
main.qml

import QtQuick 2.9

MsgDialogForm {
    signal finished()
    x: (parent.width - width) / 2
    y: (parent.height - height) / 2
    width: Math.min(applicationWindow.width, applicationWindow.height) / 5 * 4

    onAccepted: {
        console.log("Ok clicked; save answer")
        finished()
    }
    onRejected: {
        console.log("Cancel clicked; don't save")
        finished()
    }
}
...
Connections {
    target: dlgLoader.item
    onFinished: dlgLoader.source = ""
}