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, чтобы проиллюстрировать мою проблему.

0 ответов

Другие вопросы по тегам