簡體   English   中英

QML應用

[英]QML application

我的程序有兩種模式GUI(在qml上)而沒有GUI(命令行)。例如,如果我通過nameofapp.exe -no-gui必須通過no-gui版本工作,則必須通過在cmd中傳遞參數來編寫更改模式的代碼對於簡單的qt / c ++應用程序,我們有以下代碼

QCoreApplication* createApplication(int &argc, char *argv[])
{
    for (int i = 1; i < argc; ++i)
        if (!qstrcmp(argv[i], "-no-gui"))
            return new QCoreApplication(argc, argv);
    return new QApplication(argc, argv);
}

int main(int argc, char* argv[])
{
    QScopedPointer<QCoreApplication> app(createApplication(argc, argv));

    if (qobject_cast<QApplication *>(app.data())) {
       // start GUI version...
    } else {
       // start non-GUI version...
    }

    return app->exec();
}

它來自文檔,我希望qml OS的此類應用是Windows 7 Ultimate,但我不認為這取決於OS

每個應用程序類型至少需要一個頂級QObject ,它將在主事件循環中“使事情發生”。

假設您已經清楚地將視圖和后端(例如MVC)之間的關注點分離開了,那么您將擁有3個類(它們是QObject ):

  • 做實際工作的MyAppBackend
  • MyGUIMainWindow管理GUI輸入\\輸出。
  • MyCLIMainObject管理命令行輸入\\輸出

每個人都應該有一種開始工作的方法。 例如,僅顯示一個窗口小部件即可啟動Qt應用程序。

int main()
{
  QApplication app;

  MyGUIMainWindow window;
  window.show();

  return app.exec();
}

window.show()將排隊一個事件,該事件將在app.exec()時處理。 被執行。

您需要對發布事件或發出信號的函數執行相同的操作。

int main(int argc, char* argv[])
{
    QScopedPointer<QCoreApplication> app(createApplication(argc, argv));

    MyAppBackend backend;
    backend.startDeffered();

    if (qobject_cast<QApplication *>(app.data())) {
       // start GUI version...
       MyGUIMainWindow* window = new MyGUIMainWindow(0,...);
       window->show();
    } else {
       // start non-GUI version...
       MyCLIMainObject* cliobj = new MyCLIMainObject(0,...);
       cliobj->showCLi();
    }

    return app->exec();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM