QT中的emit关键字

本文详细介绍了QT编程中emit函数的作用,如何创建信号、与槽函数配合以及在按钮点击事件中使用emit发送QString内容。通过connect函数实现信号与槽函数的连接,实现实时更新UI元素。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

emit

emit在QT中是用来发射信号,需要与信号(signal)配合使用,用于对象之间的通信。当对象状态发生改变时,通过emit将信号发送到槽函数,触发一些操作。

使用样例

创建信号

使用上一篇文章创建好的工程文件
在mainwindow.h中添加头文件#include <QString>,通过QString,可以进行字符串操作。
在mainwindow.h中添加信号signals,我们给信号起名为my_signal,信号内容为QString字符串.。
在这里插入图片描述

signals:
    void my_signal(const QString& text);

这样就创建了一个信号

创建按钮和对应槽函数

点击左侧的mainwindow.ui
拖到界面上一个pushbutton和label
进入到pushbuttond的槽函数(slot)里,类型选择clicked,可以在mainwindow.h里看到已经自动生成了一个void on_pushButton_clicked();
在这里插入图片描述
这个就是点击按钮触发的槽函数
在mainwindow.cpp里可以写对应的内容
找到void MainWindow::on_pushButton_clicked()之后,在上一篇内容中直接使用

ui->label->setText(text);

将文本显示在label上,现在我们使用connect()槽函数来做这件事情

接收发射内容

在mainwindow.h上定义一个槽函数void show_hello(const QString& text)
需要注意的是这个槽函数要和信号里面的数据类型一样,在这个槽函数里更新label显示的内容

void MainWindow::show_hello(const QString &text)
{
    ui->label->setText(text);
}

使用emit发送QString字符串

在按钮的槽函数里定义text的文本内容,并且使用emit来将他发射出去

void MainWindow::on_pushButton_clicked()
{
    QString text= QString("hello!");
    emit my_signal(text);
}

这里emit的使用方法是

emit signal(parame)
emit 信号(内容)

connect将信号与槽连接起来

在mainwindow.cpp中使用connect将我们已经准备好的信号与槽函数连接起来

connect(this,&MainWindow::my_signal,this, &MainWindow::show_hello);

使用connect将信号my_singnal发送到show_hello槽函数里面
编译运行之后可以看到初始界面有一个按钮和一个显示着haha的label
在这里插入图片描述
接下来我们点击hello按钮,点击按钮之后触发了emit关键字将text里面的内容发射到show_hello槽函数里面,show_hello将这个文本显示到label上面。可以看到haha变成了文本hello!
在这里插入图片描述

完整代码

完整mainwindow.cpp代码如下

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <iostream>
#include <QString>
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    connect(this,&MainWindow::my_signal,this, &MainWindow::show_hello);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_pushButton_clicked()
{
    QString text= QString("hello!");
    emit my_signal(text);

}

void MainWindow::show_hello(const QString &text)
{
    ui->label->setText(text);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值