一、前言
眾所周知,只要涉及介面開發,都有一句話:禁止在子執行緒裡增刪改查介面。
也就是所謂的:主線程更改介面,子執行緒做運算。
有時候發現執行緒不能改變介面是非常不方便的,而上面的兩句話也只是「原則上」,也就是說其實是可以的。
至於有後果:【個人推測】
所以本文的投機取巧要慎用,反正我不管衝了!!
二、舉例
我做過mfc、c#、python、matlab【不提供執行緒】,幾乎都是這個原則,今天把這個原則深入研究一下。
三、qt執行緒概述
qt庫提供執行緒一般有兩種,加上c++自己的執行緒,就是三種。分別是:qthread子類、qobject子類+movetothrad、std::thread+其他執行緒函式。
前兩種都是用來後台計算,我還沒有用來改變過介面,往往通過訊號與槽來讓main執行緒修改介面,根據我的推測【還沒試驗,確實沒必要,只用來做計算應該也夠了】,是可以在他們依附的子執行緒裡修改介面的,如何實現看下面。
第三種c++自己的執行緒開啟函式,也就是通過執行緒物件+執行緒函式+入參的形式開啟乙個執行緒。
仔細看qt視窗專案**
就是這個ui指標,它指向的mainwindow物件,qt內部自己將ui指標指向了自己的mainwindow.ui介面檔案,所以總結來說就是:
介面也是個物件。
既然介面也是個物件,那我把這個物件當做引數傳遞到子執行緒中,是可行的。
五、實現
1、在mainwindow.h定義執行緒入口函式
void getwltdata(qstring path);2、mainwindow.cpp中實現並訪問介面
void3、開啟執行緒mystack::getwltdata(qstring path)
void總結:想要在子執行緒中訪問介面,只要把介面物件傳遞給子執行緒函式即可。mystack::on_pushbutton_17_clicked()
注意:執行緒函式要定義成類的函式,因為這樣才能訪問private屬性的ui,如果是全域性函式,則沒有this指標,即使傳遞this進去也不能訪問到private物件;
然後類函式預設有乙個this入參的;
這樣做有何不良反應還沒發現。
c 多執行緒訪問介面
c 2005後不再支援多執行緒直接訪問介面的控制項 介面建立執行緒與訪問執行緒不是同乙個執行緒 不過可以使用delegate來解決 2.定義執行緒函式 在另乙個執行緒中可以對介面控制項進讀操作 view plaincopy to clipboardprint?private void progres...
QT編寫純C介面,並解除依賴
qt編譯的dll檔案有3個基礎依賴 libgcc s dw2 1.dll,libstdc 6.dll和libwinpthread 1.dll libgcc s dw2 1.dll是c的依賴 libstdc 6.dll是c 的依賴 libwinpthread 1.dll是libstdc 6.dll的依...
多執行緒WPF 如何在子執行緒裡傳值並更新介面UI
專案裡有 mainwindow.xaml aclass.cs 兩個檔案。其中mainwindow裡有乙個textbox 乙個button 其中aclass.cs下有乙個method 方法。public class aclass mainwindow.xaml.cs 裡的button事件 privat...