Qt信号与槽机制的使用

一、信号与槽机制

1、信号

信号是一种特殊类型的成员函数。它们被定义为当某个事件发生时就被发射。当对象内部发生某些事件时,它能够发出信号。如果这个信号连接到槽,那么那个槽(函数)就被执行。可以将多个槽连接到同一个信号,那么这些槽就将一个接一个地被执行,其执行顺序是任意的。

2、槽

槽是标准的类成员函数,可以像调用其它函数一样调用它们。信号和槽关联后,每当槽所连接的信号被发射时,槽(函数)就被执行。许多QT类已经包含一些程序中可以使用的预定义槽。当编写Qt应用程序时,你会花费很多时间用于创建用户槽。当然,也可以创建自己的信号,但是大多数情况下预定义信号已经足够用。

二、使用信号与槽机制

1、方法一

F4为进入编辑信号与槽模式、F3为窗口编辑模式,我们可以通过其来进行切换ui界面编辑方式。

2、方法二

ui界面signal slots Edit方式,如图一所示例子:
图一、按钮关闭窗口实例

3、方法三

最常规的用法,Qt4下使用(现在不推荐),如实现按钮关闭窗口:
(1)我们先定义一个按钮,后通过connect()函数来实现,在构造函数中添加以下代码:

	QPushButton *btn = new QPushButton(this);
	connect(btn, SIGNAL(clicked()), this,SLOT(myclicked()));`

(2)在.h文件中进行myclicked()槽函数声明,以及QPushButton库调用:

#include <QPushButton>
private slots:
    void myclicked();

(3)我们可以通过右击自己声明的myclicked()函数,选择“Refactor”中的在.cpp中添加定义可快速生成函数的定义,并为其添加要实现的内容。例如:

void MainWindow::myclicked()
{
    ui->label->setText(QObject::tr("起飞!!!"));
}

4、方法四

自动关联方式,button点右键"转到槽",会自动生成由字符on、发射信号的部件对象名和信号名组成的槽函数,例如:
on_pushButton_2_clicked();

5、方法五

connect()函数基于函数指针的重载形式,Qt5下使用(推荐使用),实现方法与方法三类似,只需在connect()函数中做以下更改:

connect(btn, &QPushButton::clicked, this, &MainWindow::myclicked);

6、方法六

手动提交,emit方式,
(1)在构造函数中添加以下代码:

connect(this, SIGNAL(mySignal()), this, SLOT(myclicked()));

(2)并添加调用,如下示例所示:

void MainWindow::on_pushButton_2_clicked()
{
    ui->label_2->setText(QObject::tr("Hello"));
    emit mySignal();
}

(3)使用此方法时,还要在.h文件中进行以下声明:

signals:
	void mySignal();

7、方法七

lambda方法,在C++11下使用,在构造函数中添加以下代码:

connect(btn, &QPushButton::clicked, [btn](){
        if(btn->text() == "lambda")
            btn->setText("QST");
        else
            btn->setText("lambda");
});

注:使用此方法时,应在.pro文件中添加以下代码:

CONFIG += C++11

SignalandSlot代码示例

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

m0_51396964

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值