Qt当中的信号与槽
信号(signal)与槽(slot)是qt的一大特色,由元对象系统(meta object
system)提供,用于对象间的通信,类似的还有借助于函数指针的回调机制,理论上,信号与槽比回调的反应速度要慢,但前者用起来更灵活。
- 信号与槽的原理:
- 当一个特定事件发生时,QT的对象发出一个信号(signal)。
- 槽(slot)就是一个C++函数,被定义来对特定信号进行功能响应。
- 如何使用集成开发环境自动生成槽函数框架
(1) 操作自动生成槽函数 右键点击控件-->转到槽--->选择信号->自动在类的声明和.cpp源码中生成槽函数 private slots: //slots表示槽函数, 当你右键点击控件,选择转到槽函数 void on_pushButton_3_clicked(); (2) 自动生成的槽函数命名规则 on_组件对象的名字_信号的名字()
- 如何敲代码去关联信号与槽函数
(1) 原因: 有些情况下,ui界面不是用ui设计师设计,被迫只能自己写代码
(2) 使用connect函数去关联信号和槽函数
bool QDBusConnection::connect(const QString &service, const QString &path, const QString
&interface, const QString &name, const QString &signature, QObject *receiver, const char *slot)
翻译: connect(信号的发送者,SIGNAL(发送什么信号),信号的接收者,SLOT(槽函数));
例子:
//创建一个按钮对象
//QPushButton retbt("退出",this); //栈空间
QPushButton *retbt=new QPushButton("退出",this); //堆空间
retbt->setGeometry(200,100,100,30);
retbt->show();
//关联退出按钮的信号和当前窗口的槽函数
connect(retbt,SIGNAL(clicked(bool)),this,SLOT(retfun()));
消息盒子
1. 消息盒子
有多种不同类型的消息盒子: (QT自带的标准的消息盒子)
警告: warning()
提示信息: information()
帮助信息: question()
错误: critical()
自定义消息盒子