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);
}