QT 信号槽机制
所有从 QObject 或其子类 ( 例如 Qwidget) 派生的类都能够包含信号和槽
(使用情况:类需要继承自QObject,并且在类的开头声明Q_OBJECT宏)
QT信号槽->类似于观察者模式
在信号被发送出来以后,会有对其感兴趣得槽去connect。槽函数自动触发。
QT自带得槽函数:
按钮等控件有自带得signals,从帮助文档中即可查看。例如:QPushButton::clicked
自定义信号槽:
注意使用条件。
1.自定义一个信号
class{
siganls:
void xxxx(); // 可以带参
}
2.自定义一个槽函数
3.connect 链接
4.emit 信号
关于connect的书写格式(QT5--c++11)
QObject::connect(&newspaper,
static_cast<void (Newspaper:: *)(const QString &, const QDate &)>(&Newspaper::newPaper),
&reader,
&Reader::receiveNewspaper); // 红体字部分是信号带参的参数类型,这种写法可以有效解决QT5信号槽有重载的情况
关于connect第五个参数

  如果是在同一线程里面的操作(signal和slot都在同一个线程),那么用Qt::DirectConnection的效率最高(使用默认值Qt::AutoConnection也OK),主要是Qt::DirectConnection和Qt::QueuedConnection都需要储存到队列。
  如果是多个线程之间进行消息传递(signal和slot都在不同线程),那么就要用到Qt::QueuedConnection或者Qt::BlockingQueuedConnection,不过一个是无阻塞的(Qt::QueuedConnection),一个是阻塞的(Qt::BlockingQueuedConnection,发送消息后会阻塞,直到所有的slot都被执行)。
 
                    
                     
                    
                 
                    
                 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号