QT5 信号槽连接机制
来源:互联网 发布:淘宝自动发货订单 编辑:程序博客网 时间:2024/05/16 15:42
信号槽是QT最重要的机制之一,QT5中对这一机制进行了升级,使之更好用。
首先看下这个例子:
#include <QApplication>
#include <QPushButton>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QPushButton button("Quit");
// qt 5.0 signal-slot
QObject::connect(&button, &QPushButton::clicked, &QApplication::quit);
button.setDefault(true);
button.show();
return a.exec();
}
在qt4.*的里是不能编译运行的。
QT5的信号槽连接基本形式没有变:
connect(sender, signal, receiver, slot);
但是参数有变化QObject的connect有五个重载:
QMetaObject::Connection connect(const QObject *, const char *,
const QObject *, const char *,
Qt::ConnectionType);
QMetaObject::Connection connect(const QObject *, const QMetaMethod &,
const QObject *, const QMetaMethod &,
Qt::ConnectionType);
QMetaObject::Connection connect(const QObject *, const char *,
const char *, Qt::ConnectionType) const;
缺少receiver,其实是省略了this。
以上三种是QT4所有的,以下为QT5中新增的。(我们的例子是使用了下面第二种)
QMetaObject::Connection connect(const QObject *, PointerToMemberFunction,
const QObject *, PointerToMemberFunction,
Qt::ConnectionType)
PointerToMemberFunction: 指向成员函数的指针
QMetaObject::Connection connect(const QObject *, PointerToMemberFunction,
Functor);
Functor: 这个类型可以接受 static 函数、全局函数以及 Lambda 表达式
但是一些特殊的信号和槽方法还是必须要用宏SIGNAL() SLOT(),例如:
QLabel *label = new QLabel;
QScrollBar *scrollBar = new QScrollBar;
QObject::connect(scrollBar, SIGNAL(valueChanged(int)), label, SLOT(setNum(int)));
如果我们查看这两个宏的定义,就会发现他们是const char *的类型。
- QT5 信号槽连接机制
- Qt5信号和槽机制
- Qt5信号和槽机制
- Qt5信号和槽机制
- Qt5 lambda表达式连接QTcpServer信号槽
- Qt5 UI信号、槽自动连接的控件重名大坑
- Qt5信号与槽C++11风格连接简介
- QT5 信号槽
- Qt5菜鸟入门(2) 连接信号槽和信号小例子
- QT5之信号与槽
- Qt5.8.0信号和槽
- Qt5 信号槽新写法
- QT5 信号槽小知识
- Qt的信号槽机制介绍(含Qt5与Qt4的差异对比)
- Qt- “信号-槽”机制之连接类型 部分文档翻译
- QT中connect连接信号signals和槽slots机制
- 信号与槽的新语法(Qt5)
- Qt5 中关于信号槽的改动
- 【转】看完这个你的位运算学得就差不多了
- java list 三种循环
- clearcase常用命令
- Android之SQLite 学习二
- eclipse It is indirectly referenced from required .class files
- QT5 信号槽连接机制
- 设计并实现一个LogService,应用开发时可以打印log到视图(TextView)中显示
- XMPP 初步认知
- 【多媒体封装格式详解】---MP4【4】
- 2013打算
- 平台rtc驱动最后的疑惑解决driver->probe到平台->probe
- 安装 Twisted for win
- 使用NSTimer实现倒计时
- oracle数据库插入一条记录同时返回该记录的id值