日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

QT信号与槽(自定义带参数的信号)

發(fā)布時間:2023/12/18 c/c++ 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 QT信号与槽(自定义带参数的信号) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

關(guān)于QT信號與槽的問題其實每個初學(xué)QT的人都會遇到,當(dāng)時我需要做一個帶界面的demo,在信號和槽的問題上,我需要的想法是讓槽可以有參數(shù)的進行操作,但是系統(tǒng)內(nèi)置的clicked()信號是不含參數(shù)的,這對當(dāng)時根本沒接觸過QT的我來說就很沒頭緒,無奈之下只好選擇了使用全局變量這個下下策,還好我的demo代碼量呀不是很大。我當(dāng)時是借了一本QT CREATOR快速入門,雖說是好書,但是也很難靜得下心來看,于是選擇在網(wǎng)上翻閱資料將信號與槽這一部分內(nèi)容給初步整理了下,得出自己的見解。
QT的作用是做出一個可視化的交互見面,這一點跟中學(xué)學(xué)的VB很像,當(dāng)然兩者的能力就天差地別了。在QT中,通過控件來實現(xiàn)需求。這里我用最簡單的按鈕QPushButton和輸入框QLineEdit作演示,希望這篇博客能讓你對信號和槽有個印象。
為了盡量簡潔的說明信號問題,在創(chuàng)建QT項目時選擇基類為Widget,不勾選界面。
首先,在QT幫助文檔里是有內(nèi)置的SIGNAL和SLOT的,在SIGNAL中有一個clicked信號,默認參數(shù)bool。這里我們需要新建一個按鈕,同時定義一個槽函數(shù)(槽函數(shù)即接收到信號時所做出的行為)。

QPushButton *b2=new QPushButton(this);b2->move(50,50);b2->setText("Send Signal");edit=new QLineEdit(this);edit->setText("Ready to recv");//edit定義在類中,之后要用到connect(b2,&QPushButton::clicked,this,&Signal::MySlot);

因為需要用到類QPushbutton,故需包含相應(yīng)的頭文件,這邊著重講解connect函數(shù)。
connect函數(shù)用于將信號的發(fā)出者和信號的處理者聯(lián)系起來,第一第三個參數(shù)分別為發(fā)出者和接收者,注意為指針類型,this為對象的指針,這一點和C++語法一樣。第二參數(shù)為信號,第四參數(shù)為槽函數(shù),均可自定義。這里clicked為系統(tǒng)內(nèi)置信號,在b2接收到clicked(鼠標點擊信號)后,對象(此處為主窗口)作出MySlot反應(yīng),MySlot為我定義的一個槽函數(shù)。也就是說,此時我按下b2按鈕,窗口會運行MySlot函數(shù)。
在理解以上內(nèi)容的基礎(chǔ)上,下面將介紹重點,即自定義信號,編寫帶函數(shù)參數(shù)的槽函數(shù):

signals:void mySignal(QLineEdit*,int ); private slots:void MySlot();void MyDel(QLineEdit *edit,int x);

上述為在頭文件中,注意在定義信號時要在前面加上signals ,且信號和槽的返回值均為void,此時我定義了一個信號,它將傳遞一個QLineEdit*型參數(shù)和一個int型參數(shù)

void Signal::MySlot() {emit mySignal(edit,5); } void Signal::MyDel(QLineEdit *edit,int x) {edit->setText("The Num is "+QString::number(x)); }

自定義槽函數(shù)MySlot(),此槽函數(shù)僅僅用于發(fā)送之前定義的帶參數(shù)的信號mySignal(),之前此槽函數(shù)與按鈕b2的clicked信號已經(jīng)connect過,故點擊b2,將發(fā)送信號mySignal(edit,5);

connect(this,&Signal::mySignal,this,&Signal::MyDel);
  • 1

connet 此自定義的信號和槽函數(shù)MyDel(QLineEdit *edit,int x),接受到此信號是,操作MyDel,用于給edit設(shè)置文本屬性。
下面附上效果圖

總結(jié)

以上是生活随笔為你收集整理的QT信号与槽(自定义带参数的信号)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。