Qt每天一例17.信号槽的一些写法技巧
Posted 鱼酱2333
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Qt每天一例17.信号槽的一些写法技巧相关的知识,希望对你有一定的参考价值。
1.参数介绍
QMetaObject::Connection QObject::connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type = Qt::AutoConnection)
- 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);
- Qt4的写法
QLabel *label = new QLabel;
QScrollBar *scrollBar = new QScrollBar;
QObject::connect(scrollBar, SIGNAL(valueChanged(int)),
label, SLOT(setNum(int)));
- 差异
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);
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()));
5.信号断开
- 断开与myObject对象的信号与其他对象间的连接,使用后myObject发出的信号没有对应的槽函数进行响应
disconnect(myObject, 0, 0, 0);
// or
myObject->disconnect();
- 断开与myObject对象的mySignal()信号与其他对象间的连接,使用后myObject发出mySignal()信号没有对应的槽函数进行响应
disconnect(myObject, SIGNAL(mySignal()), 0, 0);
// or
myObject->disconnect(SIGNAL(mySignal()));
- 断开与myObject对象与myReceiver对象间的连接,使用后myObject发出mySignal()信号myReceiver对应的槽函数进行响应
disconnect(myObject, 0, myReceiver, 0);
// or
myObject->disconnect(myReceiver);
注意:
- 0表示任意的信号或者接收者对象
- const QObject * sender不能是0
6.信号槽宏函数
QObject::connect(scrollBar, SIGNAL(valueChanged(int)),
label, SLOT(setNum(int)));
7.信号参数可以多于槽参数
QPushButton *a = new QPushButton;
a->setParent(this);
void(MainWindow:: *dealtestex)(int) = &MainWindow::dealTest2;
connect(a,&QPushButton::clicked,this,dealtest2);
以上是关于Qt每天一例17.信号槽的一些写法技巧的主要内容,如果未能解决你的问题,请参考以下文章