QT中對於有發生過載的訊號時的處理辦法

2021-09-24 23:10:56 字數 956 閱讀 8464

環境:qt5.5.1

目的:spinbox的數值變化,slider位置隨之變化。

一般都是採用訊號與槽機制,按照我自已慣用的格式如下:

connect(ui->spinbox,&qspinbox::valuechanged,ui->horizontalslider,&qslider::setvalue);
報錯如下:

error: no matching function for call to 'mywidget::connect(qspinbox*&, , qslider*&, void (qabstractslider::*)(int))'

connect(ui->spinbox,&qspinbox::valuechanged,ui->horizontalslider,&qslider::setvalue);

^

因為訊號有過載,像我是上面這種找位址的方式就不明確,所以要利用函式指標,先指向乙個明確的int型別的位址,再進行操作。

採用這種指標指定明確型別位址的方式可以實現功能

void (qspinbox:: *spinsignal)(int) = &qspinbox::valuechanged;

connect(ui->spinbox,spinsignal,ui->horizontalslider,&qslider::setvalue);

另外,採用qt4的訊號與槽也可以實現

connect(ui->spinbox,signal(valuechanged(int)),ui->horizontalslider,slot(setvalue(int)));
兩種方式都是通過編譯且實現功能的。如果有更好的方式,歡迎補充!

Qt訊號的過載

處理子視窗的訊號 void subwidget funsignal subwidget mysignal connect b2,funsignal,this mainwidget delsub 處理子視窗的訊號 含參 過載 void subwidget testsignal int qstring ...

Qt中的訊號和槽

訊號槽是qt中特有的概念。它使得程式設計師將不同的object繫結起來,而object物件間並不需要對相互了解。slots也是普通的c 方法,它們可以是virtual 可以被過載 可以使private protected public,可以像其它c 方法一樣有各種型別的引數,signals則無這些屬...

Qt中的訊號和槽

目錄 1 概念 2 自定義的訊號和槽 3 自定義的訊號和槽出現過載 4 qstring轉為char 5 lambda表示式 訊號和槽是用於將訊號傳送者與訊號處理者關聯起來 connect 訊號的傳送者,傳送的具體資訊,訊號的結束者,訊號的處理 槽 connect btn3,mypushbutton ...