QT信号(SIGNAL)与槽(SLOT)
来源:互联网 发布:古筝调音器安卓软件 编辑:程序博客网 时间:2024/05/22 06:54
QT中的信号槽是QT框架中十分重要,同时也是十分特别的机制之一。
对于它的理解,你可以把它当做Windows系统中的消息处理函数。比如,当一个按钮控件被单击了一下,那么它就会发出一个信号(signal),这如同一个广播的消息,等待一个对其感兴趣的对象作出回应。当有一个对象作出回应时会使用连接(connect)函数,意思是,调用自己的一个槽(SLOT)来处理这个信号。也就是说,当信号发生时,被连接的槽会自动被回调。
至于该机制是如何实现的,目前还不关我的事。
接下来,以下面的代码为例说明一下:
//QT 5.6#include <QApplication>#include <QtCore>#include <QPushButton>int main(int argc, char *argv[]){ QApplication a(argc, argv); QPushButton button("OK"); QObject::connect(&button, &QPushButton::clicked, &QApplication::quit); button.show(); return a.exec();}
首先说明 一下,我使用的是QT5.6的版本,代码在QT4中可能会编译错误。
我们首先创建一个空的QT Widgets工程,在main.cpp中加入上述代码。点击运行,在弹出的对话框中会有一个“OK”的按钮,点击后,程序会自动退出。
QT中与按钮对应的类叫做“QPushBotton”。继承自QAbstractButton,它基本的显示与创建如同上述代码。代码中的connect函数,用于将button对象的函数clicked()与quit()关联起来。下面仔细说明这个函数。
在QT5中,QObject::connect()有五个重载,在帮助文档中都可找到:
[static]QMetaObject::Connection QObject::connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type = Qt::AutoConnection);[static] QMetaObject::Connection QObject::connect(const QObject *sender, const QMetaMethod &signal, const QObject *receiver, const QMetaMethod &method, Qt::ConnectionType type = Qt::AutoConnection);QMetaObject::Connection QObject::connect(const QObject *sender, const char *signal, const char *method, Qt::ConnectionType type = Qt::AutoConnection) const;[static] QMetaObject::Connection QObject::connect(const QObject *sender, PointerToMemberFunction signal, const QObject *receiver, PointerToMemberFunction method, Qt::ConnectionType type = Qt::AutoConnection);[static]QMetaObject::Connection QObject::connect(const QObject *sender, PointerToMemberFunction signal, Functor functor);
这五个函数的返回值都是“QMetaObject::Connecttion”,现在先不要关心这个,因为我也不知道。在QT中一般使用“connect()”函数的形式是:
connect(object1, signal, object2, slot);
这是常用的方式,需要在信号(signal)外加一个SIGNAL()的宏,槽外加SLOT()宏。上述五个重载函数中第三个比较特别,它不需要传入object2,它其实会自动this作为object2。第五个中的functor参数是Functor,该类型可以接收静态函数,全局函数或者Lambda表达式。
- QT信号(SIGNAL)与槽(SLOT)
- Qt 初探信号与槽(signal & slot)
- Qt信号与槽机制(signal & slot)
- 信号(SIGNAL)与槽(SLOT)
- QT程序实例----信号与插槽(signal and slot)
- 信号(Signal)与槽(Slot)-Qt中的典型机制
- 信号(Signal)与槽(Slot)-Qt中的典型机制
- 信号(Signal)与槽(Slot)-Qt中的典型机制
- 信号(Signal)与槽(Slot)-Qt中的典型机制
- 信号(Signal)与槽(Slot)-Qt中的典型机制
- 信号和槽机制(Signal & Slot)
- Qt学习(三) QT信号:(signal)和QT槽:(slot)
- qt信号signal和槽slot机制
- qt信号signal和槽slot机制
- qt信号signal和槽slot机制
- qt信号signal和槽slot机制
- qt信号signal和槽slot机制
- QT之魂——信号(SIGNAL)和槽(SLOT)
- JavaScript基础学习——数组
- SSH远程登录
- 关于年轻人申请基金面上项目的一点思考
- windows下安装redis
- 第一部分:JDK的源码安装和常用shell操作
- QT信号(SIGNAL)与槽(SLOT)
- DOM(document获取节点byId.byTagName运用实现超链接跳转与不跳转)
- 从青年基金到面上项目
- Android--Dagger入门浅析
- 自定义控件:自定义Toast
- 百度地图API根据具体地址获取经纬度
- 枚举-讨厌的青蛙(算法基础 第2周)
- Probability
- linux之地址空间