qt最多可以支持多少個(gè)線程 QT C 在子線程里使主線程創(chuàng)建一窗口?
QT C 在子線程里使主線程創(chuàng)建一窗口?我提供了兩個(gè)相對簡單的解決方案創(chuàng)建一個(gè)receiver QObject,它必須存在于繼承的線程中或者為對象構(gòu)造相應(yīng)的信號,然后連接到主線程窗口,它通常是連接
QT C 在子線程里使主線程創(chuàng)建一窗口?
我提供了兩個(gè)相對簡單的解決方案
創(chuàng)建一個(gè)receiver QObject,它必須存在于繼承的線程中
或者為對象構(gòu)造相應(yīng)的信號,然后連接到主線程窗口,它通常是連接queue
然后發(fā)出你在子線程中實(shí)現(xiàn)的信號
或者使用postevent來解決問題,自定義一個(gè)事件,然后持有主線程窗體對象,然后postevent給出主線程窗體對象
connect(sender,signal(send(I)),receiver,slot(receive(I)))非常簡單!在I之后加上emit send(I)。當(dāng)然,send(int I)是一個(gè)信號!Receive(int i)是要顯示的插槽函數(shù)
在Qt中如何讓主界面實(shí)時(shí)響應(yīng)子線程發(fā)來的數(shù)據(jù)?
在QT中使用多線程有兩種方法。一種是將qthread子類化,重寫run函數(shù),并在run函數(shù)中實(shí)現(xiàn)自己的代碼。這部分代碼通常非常耗時(shí)或直接被阻塞。例如,while循環(huán)設(shè)置一個(gè)標(biāo)志來判斷循環(huán)的結(jié)束。網(wǎng)上有很多這樣的例子,所以我就不寫了。如果你這樣寫,會有一些東西需要理解的。對于qthread子類,只有run函數(shù)的內(nèi)容在子線程中執(zhí)行,其他部分(如slot函數(shù))在主線程中執(zhí)行(假設(shè)子線程在主線程中打開)。另一種方法是子類QObject,創(chuàng)建一個(gè)新線程,然后使用movetothread將這個(gè)類的對象移動到新線程。這樣,它的所有槽函數(shù)都在新線程中執(zhí)行。If(QObject對象)。直接使用Abc(),此成員函數(shù)在主進(jìn)程中執(zhí)行,可能出現(xiàn)運(yùn)行錯(cuò)誤“QObject::KillTimer:timers cannot be stopped from another thread”。如果使用第二種方法,似乎會遇到這樣的問題:如果在一個(gè)slot函數(shù)中阻塞一個(gè)子線程,其他slot函數(shù)將無法接受來自主線程的數(shù)據(jù)