我正在使用带有QQuickWidget和QMainWindow的QML构建桌面应用程序,除了FileDialog之外,一切看起来都很好。当我使用FileDialog打开一个窗口时,它第一次工作完美,但在第二次等 FileDialog窗口呈现在主窗口后面,阻止用户选择文件,点击后可以选择文件“选择窗口”(将其向前推进)。如果应用程序处于全屏模式,则无法意识到FileDialog窗口已打开。它只是在我使用QQuickWidget和QMainWindow时发生,如果我使用QGuiApplication创建一个项目(没有QQuickWidget和QMainWindow ),我对FileDialog行为没有任何问题。一些想法如何使FileDialog与QQuickWidget一起正常工作?
文件对话框代码:
/*uncomment ApplicationWindow and comment the rectangle component to right behavior*/
/*
ApplicationWindow{
height: 600
width: 800
*/
Rectangle {
id: rect
visible: true
Button{
id:open
height: 40
onClicked: fileDialog.open()
text: "open dialog"
}
FileDialog {
id: fileDialog
modality: Qt.ApplicationModal
title: "FileDialogTest"
nameFilters: [ "Zip Files (*.zip )", "All files (*)" ]
selectedNameFilter: "All files (*)"
selectFolder: false
onAccepted: {
console.log("Accepted")
}
onRejected: {
console.log("Rejected")
}
}
//}
主文件
int main(int argc, char *argv[])
{
/*##### This block make fileDialog work properly #####*/
/*
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
engine.load(QUrl(QLatin1String("qrc:/main.qml")));
if (engine.rootObjects().isEmpty())
return -1;
*/
/*#### This block make openDialog work have weird behavior ####*/
/* Should be commented when the previous block is uncomment */
QApplication app(argc, argv);
QMainWindow mainWindow;
QQuickWidget *quickWidget = new QQuickWidget;
quickWidget->setMinimumSize(800, 600);
quickWidget->setResizeMode(QQuickWidget::SizeRootObjectToView);
quickWidget->setSource(QUrl("qrc:/main.qml"));
mainWindow.setCentralWidget(quickWidget);
mainWindow.show();
return app.exec();
}
我做了一个简单的例子来说明我的问题,它可以通过 https://drive.google.com/file/d/1B_qtSZnigrLtDMHS0-84mOrFe5t2ZVIj/view?usp=sharing下载,并且可以在 QtCreator 上运行来说明我的问题。