QT 12.自定义信号、信号emit、信号参数注册_ev
效果
用 自定义信号和槽函数实现窗口间的数据传递。
1.自定义信号
//自定义信号
signals:
void sig_addOne(int value);
2.发送信号和数据
int val = 100;
void SetDialog::on_btnAdd_clicked()
{
//发送信号
emit sig_addOne(val);
val++;
}
3.连接信号和槽
void Widget::on_btnOpen_clicked()
{
SetDialog dlg;
//连接信号和槽
//&dlg 发送者,
//&SetDialog::sig_addOne 发送的信号
//后面是接收者和槽函数
connect(&dlg,&SetDialog::sig_addOne,[=](int value){
ui->lineEditNumber->setText(QString::number((value)));
});
dlg.exec();
}
完整代码
头文件
setdialog.h
#ifndef SETDIALOG_H
#define SETDIALOG_H
#include <QDialog>
namespace Ui {
class SetDialog;
}
class SetDialog : public QDialog
{
Q_OBJECT
public:
explicit SetDialog(QWidget *parent = nullptr);
~SetDialog();
private slots:
void on_btnAdd_clicked();
//自定义信号
signals:
void sig_addOne(int value);
private:
Ui::SetDialog *ui;
};
#endif // SETDIALOG_H
widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
QT_BEGIN_NAMESPACE
namespace Ui {
class Widget;
}
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
private slots:
void on_btnOpen_clicked();
private:
Ui::Widget *ui;
};
#endif // WIDGET_H
2.源文件
setdialog.cpp
#include "setdialog.h"
#include "ui_setdialog.h"
SetDialog::SetDialog(QWidget *parent)
: QDialog(parent)
, ui(new Ui::SetDialog)
{
ui->setupUi(this);
}
SetDialog::~SetDialog()
{
delete ui;
}
int val = 100;
void SetDialog::on_btnAdd_clicked()
{
//发送信号
emit sig_addOne(val);
val++;
}
widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include "setdialog.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_btnOpen_clicked()
{
SetDialog dlg;
//连接信号和槽
//&dlg 发送者,
//&SetDialog::sig_addOne 发送的信号
//后面是接收者和槽函数
connect(&dlg,&SetDialog::sig_addOne,[=](int value){
ui->lineEditNumber->setText(QString::number((value)));
});
dlg.exec();
}
3.界面文件
setdialog.ui
widget.ui