如何做影視劇網(wǎng)站交換鏈接適合哪些網(wǎng)站
在Qt中,如何將兩個對象進行關(guān)聯(lián),讓一個對象發(fā)出信號,然后另外一個對象接收到信號后,執(zhí)行該對象的一個方法,要實現(xiàn)這種方式,則需要使用到信號和槽機制。
信號:
信號一定是一個沒有返回值的函數(shù),但是參數(shù)可以聲明為有,也可以聲明為沒有。而且信號不需要實現(xiàn)只需要其類中進行聲明??梢哉J為信號不是一個函數(shù),而是一個函數(shù)的聲明。
如:
class A : public QObject
{Q_OBJECT
public:// ...signals:void Asignal();// ...
};
在定義信號和槽相關(guān)的類的時候,有幾點是需要注意的:
1. 首先要想使用信號和槽,必須要從QObject來進行派生,因為只有QObject類以及其子類才能包含有信號和槽。
2. 必須包含有Q_OBJECT
槽:
槽是一個實實在在的函數(shù),既要進行聲明也要實現(xiàn),這點上和c++中常規(guī)的函數(shù)沒有什么區(qū)別,但是槽的返回值一定void類型,槽可以有參數(shù),參數(shù)的類型和數(shù)量完全取決于你的需求,槽對參數(shù)并沒有限制。
如:
class MyClass : public QObject
{Q_OBJECT
public:// ...public slots:void mySlot(int parameter1, QString parameter2);// ...
};// 在cpp文件中
void MyClass::mySlot(int parameter1, QString parameter2)
{// 槽的實現(xiàn)
}
信號和槽如何配合使用?
我們使用使用connect來將發(fā)生者,發(fā)送的信號,接收者,接收后進行的動作綁定在一起,在connect中的實現(xiàn)即為:
connect(sender, signal, recipient, fuction);
其中的所有參數(shù)都是地址,不要搞錯了。
舉個例子:
?
connect(ui->pushButton, &QPushButton::clicked, this, &widget::close);
//這里是使用Qt中默認的信號和信號槽來實現(xiàn)綁定
這樣就可以實現(xiàn)點擊ui文件中的pushButton,生成一個clicked點擊信號,然后widget界面接收到該信號,執(zhí)行close方法。
其中的widget中的私有成員指針ui指向ui文件生成的界面,這個界面對應(yīng)的代碼中的組件都是以指針的方式存在。
我們知道c++不能使用像“類::成員函數(shù)”這樣的方式來獲得成員函數(shù)的地址,因此可以再前面加一個&作為標記符(而不是取地址的意思),來告訴編譯器,這個是一個成員函數(shù)的地址,這樣才能讓編譯器來獲得正確的成員函數(shù)地址。
如何自定義信號和信號槽?
1. 在ui界面實現(xiàn)組件轉(zhuǎn)到槽
這樣會直接在widget中生成一個信號槽,且該按鈕直接關(guān)聯(lián)到該信號槽,點擊即可出發(fā)信號槽。
2. 如果信號所在的類無法直接發(fā)出信號,則在組件跳轉(zhuǎn)槽中拋出一個連接好的信號槽所需的信號,從而實現(xiàn)間接連接信號和信號槽