目錄
四、嵌入notepad
五、呼叫ping命令
六、嵌入其他qwidget窗體
做客戶端開發已經有好幾個年頭了,今天看到同事發了一篇關於富途牛牛的文章,核心思想就是想說,新版本的富途支援多程序架構了,效率大大提公升啦,可以更好的裡有多核cpu,提供軟體執行效率。
聽到這個訊息,我不僅感嘆,我靠,真的好牛逼。
其實很早以前就接觸過多程序,支援自己好想也沒有想那麼多,一直對多程序架構的概念不是那麼清晰。今天和同事聊了一些相關話題,感覺自己的知識面豁然開朗,要學習的東西好像還挺多。
看下面這張圖,是任務管理器的應用截圖,以前還真是沒發現,居然我自己用的這麼多應用都是多程序架構的。
有了這麼多的多程序架構開發的客戶端軟體,難道說多程序開發已經是勢在必行了?
下面是我做的乙個demo程式截圖,測試程式中一共包含了4個使用場景,分別是:
qt嵌入系統自帶計算機
qt嵌入系統自帶記事本
qt呼叫系統ping命令,並收集結果
qt嵌入其他qt可執行程式
大家可以先看看效果圖,如果覺著有價值的可以繼續往下看,下面我會分章節把四個事例進行講解。
首先需要清楚,我們是多程序介面開發,那麼我們的exe啟動後,勢必是需要啟動其他可執行程式的,並且把其他程序的介面嵌入到我們的視窗中來
啟動外部程序有多重方式,qt使用比較習慣的同學可以直接使用qprocess類,這個類是qt封裝的乙個跨平台的類。
啟動方式可能像下面這樣
qprocess * myprocess = new qprocess(this);
qstringlist arguments;
myprocess->start("c:/windows/system32/notepad.exe");
myprocess->waitforfinished(2000);
除過qprocess之外,windows系統上我們還可以使用createprocess方法來建立程序。
qstring cmd = "c:/windows/system32/calc.exe";
startupinfo si = ;
process_information pi;
si.dwflags = startf_useshowwindow;
si.wshowwindow = true;
bool bret = createprocess(
null,
(lpwstr)cmd.tostdwstring().c_str(),
null,
null,
false,
create_new_console,
null,
null, &si, &pi);
外部程序啟動後,我們可以在任務管理器中找到啟動的程序
接著我們需要使用spy++工具進行檢視外部程序的類名稱和視窗名稱,並使用findwindow介面程序查詢,找到這個程序的主視窗控制代碼後,嵌入到我們的程式中來。
類名和視窗名稱查詢過程可以參考外部程序嵌入到qt程序介面這篇文章中的內容。
wid wid = (wid)findwindow(qstringliteral("notepad").tostdwstring().c_str()
, qstringliteral("無標題 - 記事本").tostdwstring().c_str());
qwindow * window = qwindow::fromwinid(wid);
if (window)
如上**所示,我們如果找到外部程序的主視窗控制代碼後,就可以使用qt提供的createwindowcontainer這個介面進行建立qwidget,並加入到我們的程式中來。
外部程序被封裝成為乙個qwidget後,我們只需要加入到自己的布局中即可。
ui.verticallayout_2->addwidget(widget);
接下來我們分別講解不同場景下的多程序介面開發的簡單使用
第三小節已經把嵌入其他程式的流程大致說了一遍,這裡我就不在詳細說明了,直接給出具體**。
**中比較關鍵的有2個地方
qprocess不能使用臨時變數,要不然函式執行完畢notepad.exe程序也就退出了。
findwindow的兩個引數,乙個是類名,乙個視窗標題欄名稱,這兩個資訊都可以用個spy++進行查詢。
void embedcalculate::on_pushbutton_2_clicked()
}
ping命令使用場景主要是想展示主程序和外部程序是怎樣通訊的,雖然這個事例比較簡單,但也算是兩者之間發生了資訊交換
子程序在執行完ping乙個位址之後,會把得到的結果傳遞給主程序,主程序使用readall函式全部讀入到主程序中。
雖然這個東西是最後講的,但是這個才是重頭戲,有了這個實驗之後,我們以後的qt多程序介面開發也可以進行投入正式環境了。
如下所示,childwidget外部程式的主窗體被我們嵌入到了embedcalculate這個程序的主介面上,突然覺著好神奇,給自己點讚,哈哈哈哈。
由於我這裡的childwidget外部程式和embedcalculate主程式在乙個目錄中,因此cmd變數直接就指向了childwidget這個外部程式的名稱。
其他部分的**基本上就和前邊幾種使用場景差不多。
void embedcalculate::on_pushbutton_4_clicked()
}
外部程序嵌入到qt程序介面
如果您覺得文章不錯,不妨給個打賞,寫作不易,感謝各位的支援。您的支援是我最大的動力,謝謝!!!
很重要--**宣告
C 多程序開發,控制程序數量
正在c 程式優化時,如果多執行緒效果不佳的情況下,也會使用多程序的方案,如下 system.threading.tasks.task task system.threading.tasks.task.factory.startnew object mystate collectpathitems.d...
flask多程序,多執行緒部署介面程式
flask是一種方便快捷輕量級部署介面程式的工具,輕量級伺服器架構,可以方便部署乙個restful介面程式,供別人呼叫。1 首先匯入相應的包 from flask import flask,request2 給提供介面服務的函式加上修飾 def func pass if name main 除此之外...
QT使用外掛程式開發介面
首先特別感謝外掛程式創作者飛揚青雲 feiyangqingyun 第二步安裝 d qt qt5.5.1 5.5 mingw492 32 plugins designer中 第三步開發 找到qt安裝目錄的plugins的同級目錄中的bin資料夾 d qt qt5.5.1 5.5 mingw492 32...