如何在程序完成前显示QML window?

How to show the QML window before the program is completed?

问题很简单:window不渲染刷新,直到程序结束。它只是不显示任何内容。 我想看到 window 即使长周期还没有结束。 如果有任何帮助,我将不胜感激!

#include <QtGui>
#include <QtQml>

int main(int _nArgCount, char * _pArgValues[]) {
    QApplication app(_nArgCount, _pArgValues);

    //QMLblock
    QString strQmlPath = "../main.qml";
    QQmlApplicationEngine engine;
    QQmlComponent pComponent(&engine, strQmlPath);
    if( pComponent.status()==QQmlComponent::Error )
           { qDebug()<<"Error:"<<pComponent.errorString();
              return app.exec();
           }
    QObject * pQmlObject = pComponent.create();

    QObject * pWindow = pQmlObject->findChild<QObject*>("initStateGui");
    QObject * pWindowNext = pQmlObject->findChild<QObject*>("searchRemovableGui");
    pWindow->setProperty("visible","false");
    pWindowNext->setProperty("visible","true");
    QObject * pList = pQmlObject->findChild<QObject*>("devicesList");
    QStringList s;
    QString str;

    s.append("3");
    pList->setProperty("model",s);

        for (int i=0; i<5; i++){
        s.append(str.number(i));
        pList->setProperty("model",s);

    }


   return app.exec();

}

还有我的QML(我认为不需要,但无论如何):

import QtQuick 2.3
import QtQuick.Controls 1.2
import QtQuick.Window 2.2

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

    property var controlWindow: Window {
        width: 500
        height: 500
        color: palette.window
        title: "Updater"
        visible: true
        //init state
        Column {
            id: initStateGui
            objectName: "initStateGui"
            anchors.fill: parent
            anchors.margins: defaultSpacing
            spacing: defaultSpacing
            property real cellWidth: initStateGui.width / 3 - spacing
            visible: true
            Text { text: "Init state" }
            Grid {
                id: grid
                columns: 3
                spacing: defaultSpacing
                width: parent.width
                Button {
                    id: showButton
                    width: initStateGui.cellWidth
                    text: "Cancel"
                    onClicked: Qt.quit()
                }

                Button {
                    id: initStateContinue
                    objectName: "initStateContinue"
                    width: initStateGui.cellWidth
                    text: "Continue"
                    signal sigInitStateContinue()
                    onClicked: initStateContinue.sigInitStateContinue()

                }

            }

            Text {
                id: textLabel
                text: "Welcome to the updater!"
            }
            Rectangle {
                id: horizontalRule
                color: "black"
                width: parent.width
                height: 1
            }

        }

        //updater update state
        Column {
            id: updaterUpdateGui
            objectName: "updaterUpdateGui"
            anchors.fill: parent
            anchors.margins: defaultSpacing
            spacing: defaultSpacing
            visible: false
            property real cellWidth: initStateGui.width / 3 - spacing
            Text { text: "UpdaterUpdate State" }
            Grid {
                id: grid1
                columns: 3
                spacing: defaultSpacing
                width: parent.width
                Button {
                    id: showButton1
                    width: initStateGui.cellWidth
                    text: "Cancel"
                    onClicked: Qt.quit()
                }
                Button {
                    id: updaterUpdateContinue
                    objectName: "updaterUpdateContinue"
                    width: initStateGui.cellWidth
                    text: "Continue"
                    signal sigUpdaterUpdateContinue()
                    onClicked: updaterUpdateContinue.sigUpdaterUpdateContinue()

                }

            }

            Text {
                text: "Update is started!"
            }
            Rectangle {
                id: horizontalRule1
                color: "black"
                width: parent.width
                height: 1
            }

        }

        //removable Search gui
        Column {
            id:searchRemovableGui
            objectName: "searchRemovableGui"
            anchors.fill: parent
            anchors.margins: defaultSpacing
            spacing: defaultSpacing
            visible: false
            property real cellWidth: initStateGui.width / 3 - spacing
            Text { text: "Removable search State" }
            Grid {
                id: grid2
                columns: 3
                spacing: defaultSpacing
                width: parent.width
                Button {
                    id: showButton2
                    width: initStateGui.cellWidth
                    text: "Cancel"
                    onClicked: Qt.quit()
                }
            }

            Text {
                text: "Searching for removable, please wait...!"
            }




            ListView {
                id:devicesList
                objectName:"devicesList"
                width: 100; height: 500
                model: myModel
                delegate: Rectangle {
                    height: 15
                    width: 100
                    Text { text: modelData }


                }
            }

        }
    }
}

补充:我不需要线程,我需要看到带有标题的冻结 window。

如果我添加按钮,我会看到它,并在按下按钮后开始循环。 没有按钮 window 不会呈现,我找不到如何做。

在一个线程中实现是不可能的。 只有将长进程移动到另一个线程才能呈现 GUI。