Qt信号槽

Qt 信号槽
  Qt的信号槽,除了使用信号连接槽,还可以信号连接信号,断开信号,发送(转发)信号。
  一个信号可以连接一个槽,也可以一个信号连接多个槽,还可以多个信号连接一个槽。
 
// 信号连接槽
connect(发送者,信号,接受者,槽);

// 信号连接信号
connect(发送者,信号,接受者,信号);

// 断开信号连接
disconnect(发送者,信号,接受者,信号|槽);

// 发送信号
emit 信号();

 

 

信号槽的写法有Qt4版本和Qt5版本,两种写法。
主要是看个人习惯,一般我的习惯是,简单的槽函数就用Qt5写法加lambda来写,复杂的槽函数就用Qt4写法来写。
 
/* 按钮,信号不带参数*/
// Qt4 写法
connect(ui.pushButton, SIGNAL(clicked()), this, SLOT(my_slots_1()));
// Qt5 写法一
connect(ui.pushButton, &QPushButton::clicked, this, [=]() {QMessageBox::information(this, "123", "123"); });
// Qt5 写法二
connect(ui.pushButton, &QPushButton::clicked, this, &MyWidget::my_slots_1);
// Qt5 写法三,调用QWidget自带的槽函数
connect(ui.pushButton, &QPushButton::clicked, this, &MyWidget::close);


/* 下拉框,信号带参数 */
// Qt4 写法
connect(ui.comboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(my_slots_2(int)));
// Qt5 写法
connect(ui.comboBox, QOverload<int>::of(&QComboBox::currentIndexChanged), this, [=](int index) {QMessageBox::information(this, "123", "123"); });

 

 

 

自定义信号与槽(signals、slots)
class MyWidget : public QDialog
{
    Q_OBJECT

public:
    MyWidget(QWidget *parent = nullptr);
    ~MyWidget();

signals:
    void my_signals_1();        // 自定义信号

public slots:
    void my_slots_1();          // 自定义槽函数1
    void my_slots_2(int);       // 自定义槽函数2

private:
    Ui::QtWidgetsApplication1Class ui;
};

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2023-05-14 22:21  十一的杂文录  阅读(49)  评论(0编辑  收藏  举报