簡體   English   中英

信號和插槽QT

[英]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發出信號。 因為此答案可能使您回到起點(可能還有一個新問題),所以這里是一個如何從線程發出信號的可行示例:

QT在線程中向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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM