Qt開啟C 執行緒裡並訪問介面

2022-03-15 03:49:22 字數 1262 閱讀 7346

一、前言

眾所周知,只要涉及介面開發,都有一句話:禁止在子執行緒裡增刪改查介面

也就是所謂的:主線程更改介面,子執行緒做運算

有時候發現執行緒不能改變介面是非常不方便的,而上面的兩句話也只是「原則上」,也就是說其實是可以的。

至於有後果:【個人推測】

所以本文的投機取巧要慎用,反正我不管衝了!!

二、舉例

我做過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中實現並訪問介面

void

mystack::getwltdata(qstring path)

3、開啟執行緒

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...