【Qt每天一例】17.信号槽的一些写法技巧
【摘要】
文章目录
1.参数介绍2.简单使用3.函数重载时的使用4.信号连接信号5.信号断开6.信号槽宏函数7.信号参数可以多于槽参数
1.参数介绍
QMetaObject::Connection ...
1.参数介绍
QMetaObject::Connection QObject::connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type = Qt::AutoConnection)
- 1
- 2
- sender 发送者
- signal 信号
- receiver 接受者
- method 函数
- type 连接方式
2.简单使用
- Qt5的写法
connect(a,&QPushButton::clicked,this,&MainWindow::dealTest1);
void(MainWindow:: *dealtestex)(int) = &MainWindow::dealTest2;
void(MainWindow:: *dealtest2)() = &MainWindow::dealTest2;
connect(a,&QPushButton::clicked,this,dealtestex);
connect(a,&QPushButton::clicked,this,dealtest2);
- 1
- 2
- 3
- 4
- 5
- Qt4的写法
QLabel *label = new QLabel;
QScrollBar *scrollBar = new QScrollBar;
QObject::connect(scrollBar, SIGNAL(valueChanged(int)),
label, SLOT(setNum(int)));
- 1
- 2
- 3
- 4
- 差异
1.Qt的SIGNAL,和SLOT参数不会匹配,编译器不报错
2.建议使用Qt5的写法
3.函数重载时的使用
connect(a,&QPushButton::clicked,this,&MainWindow::dealTest1);
void(MainWindow:: *dealtestex)(int) = &MainWindow::dealTest2;
void(MainWindow:: *dealtest2)() = &MainWindow::dealTest2;
connect(a,&QPushButton::clicked,this,dealtestex);
connect(a,&QPushButton::clicked,this,dealtest2);
- 1
- 2
- 3
- 4
- 5
4.信号连接信号
//声明放到头文件里,不然报错
class MyWidget : public QWidget
{
Q_OBJECT
public:
MyWidget();
signals:
void buttonClicked();
private:
QPushButton *myButton;
};
MyWidget::MyWidget()
{
myButton = new QPushButton(this);
connect(myButton, SIGNAL(clicked()),
this, SIGNAL(buttonClicked()));
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
5.信号断开
- 断开与myObject对象的信号与其他对象间的连接,使用后myObject发出的信号没有对应的槽函数进行响应
disconnect(myObject, 0, 0, 0);
// or
myObject->disconnect();
- 1
- 2
- 3
- 断开与myObject对象的mySignal()信号与其他对象间的连接,使用后myObject发出mySignal()信号没有对应的槽函数进行响应
disconnect(myObject, SIGNAL(mySignal()), 0, 0);
// or
myObject->disconnect(SIGNAL(mySignal()));
- 1
- 2
- 3
- 断开与myObject对象与myReceiver对象间的连接,使用后myObject发出mySignal()信号myReceiver对应的槽函数进行响应
disconnect(myObject, 0, myReceiver, 0);
// or
myObject->disconnect(myReceiver);
- 1
- 2
- 3
注意:
- 0表示任意的信号或者接收者对象
- const QObject * sender不能是0
6.信号槽宏函数
QObject::connect(scrollBar, SIGNAL(valueChanged(int)),
label, SLOT(setNum(int)));
- 1
- 2
7.信号参数可以多于槽参数
QPushButton *a = new QPushButton;
a->setParent(this);
void(MainWindow:: *dealtestex)(int) = &MainWindow::dealTest2;
connect(a,&QPushButton::clicked,this,dealtest2);
- 1
- 2
- 3
- 4
文章来源: yujiang.blog.csdn.net,作者:鱼酱2333,版权归原作者所有,如需转载,请联系作者。
原文链接:yujiang.blog.csdn.net/article/details/105025961
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)