Qml FileDialog выполняет рендеринг за главным окном с помощью QQuickWidget (QT 5.9.1)
Я создаю настольное приложение, используя QML с QQuickWidget и QMainWindow, все выглядит нормально, кроме FileDialog. Когда я открываю окно с помощью FileDialog, оно работает безупречно в первый раз, но во второй раз и так далее , окно FileDialog отображается за основным окном, не позволяя пользователю выбрать файл, просто можно выбрать файл после нажатия на "окно выбора" (которое выдвигает его вперед). Если приложение находится в полноэкранном режиме, невозможно понять, что окно FileDialog открыто. Это просто происходит, когда я использую QQuickWidget и QMainWindow, если я создаю проект с QGuiApplication (без QQuickWidget и QMainWindow), у меня нет проблем с поведением FileDialog. Некоторые идеи, как я могу заставить FileDialog правильно работать с QQuickWidget?
FileDialog код:
/*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")
}
}
//}
main.cpp
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, чтобы проиллюстрировать мою проблему.