[英]Signals and slots QT
我現在已經針對程序中的一個主要問題問了很多不同的問題,但仍然根本沒有解決它,我正在使用線程來防止UI鎖定,但是基本上它仍然可以,因為顯然您不能做UI線程中的內容。
因此,有人告訴我使用自定義信號和插槽(沒有給出任何示例)。
因此,我從閱讀的文檔中得出了以下代碼:
。H
signals:
void paint_signal(double x, double y);
.cpp
connect(this,SIGNAL(paint_signal(double x, double y)), this, SLOT(PaintSomething(x,y)));
Paintsomething函數與此所有類都在同一個類中。
線:
*future2 = QtConcurrent::run(this, &GUI::paintAll);
全部繪制都發出paint_signal並傳遞2個雙打
emit paint_signal(x, y);
但是我得到了一個我根本不理解的錯誤
connect: No such signal GUI::paint_signal(double x, double y)
connect(this,
SIGNAL(paint_signal(double, double)),
this,
SLOT(PaintSomething(x,y)));
刪除參數名稱,它將起作用。 如果此方法不起作用,則它將:
connect(this,
SIGNAL(paint_signal(double, double)),
this,
SLOT(PaintSomething(double,double)));
讓我知道這是否對您有用:)
更新資料
這個想法是您不能在線程中使用UI,而是從線程向UI發出信號。 因為此答案可能使您回到起點(可能還有一個新問題),所以這里是一個如何從線程發出信號的可行示例:
Floris Velleman的答案是可以的,但是通過使用新的信號槽語法 ,您可以在編譯時捕獲錯誤並擺脫多余的局面。
舊語法:
connect(this,
SIGNAL(paint_signal(double, double)),
this,
SLOT(PaintSomething(double,double)));
新語法:
connect(this,
&SenderClass::paint_signal,
this,
&ReceiverClass::PaintSomething);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.