多程序介面開發 Qt試玩兒

2022-01-30 10:42:03 字數 3206 閱讀 8570

目錄

四、嵌入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...