[英]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.