QT信号与槽机制需要注意的问题
1、信號與槽的效率是非常高的,但是同真正的回調函數比較起來,由于增加了靈活性,因此在速度上還是有所損失。當然這種損失相對來說是比較小的,但是要追求高效率的話,比如實時系統,就要盡可能避免。
2、信號與槽機制與普通函數的調用一樣,如果使用不當的話,在程序執行時也可能產生死循環。因此,在定義槽函數時一定要注意避免間接形成無限循環,即在槽中再次發送所接收到的同樣信號,防止死循環。
3、如果一個信號與多個槽相聯系的話,那么,當這個信號被發射時,與之相關的槽被激活的順序將是隨機的。
4、宏定義不能用在signal和slot的參數中。既然moc工具不擴展#define,因此,在signals和slots中攜帶的宏就不能正確的工作,因此不帶參數是可以的。比如:
#define a(x) x
signals:
void someSignal(a(x))-------------------錯的
5、構造函數不能用在signals或者slots聲明區域。比如
class A:public QObject{
Q_OBJECT
public slots:
A(QObject *parent,const char *name);----------不合法
};
6、函數指針不能作為信號或者槽的參數,但是可以試試繞過這個限制。比如:
class A:public QObject{
Q_OBJECT
public slots:
void apply(void(*applyFunction)(QList*,void*),char*);----------------不合法
};
但是:
typedef void(*ApplyFunctionType)(QList*,void*);
class A:public QObject{
Q_OBJECT
public slots:
void apply(applyFunctionType,char*);------------------------------------可以
};
7、信號與槽的綁定發生在運行時刻,不能有缺省參數。
8、也不能攜帶模板類參數,即使moc不報錯,也可能達不到預期效果(也可以用typedef繞過這個問題)。
9、嵌套類不能位于信號或者槽區域內,也不能有信號或者槽。
10、友元聲明不能位于信號或者槽聲明區域內。他們應該在普通C++的private,protected,或者public區域內聲明。
轉載于:https://www.cnblogs.com/JohannaFeng/p/4720459.html
總結
以上是生活随笔為你收集整理的QT信号与槽机制需要注意的问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 让关键词快速上SEO排名的小窍门
- 下一篇: 访问phpMyAdmin系统报js错误怎