Qt中利用槽函数从一个对话框中调用另一个对话框 并且根据对话框中设置的值的改变,原本对话框的值也改变 完整代码
时间: 2023-12-14 11:36:24 浏览: 133
以下是一个示例代码,演示了如何在Qt中创建两个对话框(`Dialog1`和`Dialog2`),并且在`Dialog1`中调用`Dialog2`。当`Dialog2`中的值改变时,`Dialog1`中的值也会跟着改变。
**dialog1.h**
```c++
#ifndef DIALOG1_H
#define DIALOG1_H
#include <QDialog>
#include "dialog2.h"
namespace Ui {
class Dialog1;
}
class Dialog1 : public QDialog
{
Q_OBJECT
public:
explicit Dialog1(QWidget *parent = nullptr);
~Dialog1();
private slots:
void on_pushButton_clicked();
void on_lineEdit_textChanged(const QString &arg1);
private:
Ui::Dialog1 *ui;
Dialog2 *dialog2;
};
#endif // DIALOG1_H
```
**dialog1.cpp**
```c++
#include "dialog1.h"
#include "ui_dialog1.h"
Dialog1::Dialog1(QWidget *parent) :
QDialog(parent),
ui(new Ui::Dialog1)
{
ui->setupUi(this);
}
Dialog1::~Dialog1()
{
delete ui;
}
void Dialog1::on_pushButton_clicked()
{
dialog2 = new Dialog2(this); // 创建Dialog2实例
connect(dialog2, SIGNAL(valueChanged(QString)), this, SLOT(on_lineEdit_textChanged(QString))); // 连接valueChanged信号和on_lineEdit_textChanged槽函数
dialog2->show(); // 显示Dialog2
}
void Dialog1::on_lineEdit_textChanged(const QString &arg1)
{
ui->lineEdit->setText(arg1); // 将arg1的值设置到lineEdit上
}
```
**dialog2.h**
```c++
#ifndef DIALOG2_H
#define DIALOG2_H
#include <QDialog>
namespace Ui {
class Dialog2;
}
class Dialog2 : public QDialog
{
Q_OBJECT
public:
explicit Dialog2(QWidget *parent = nullptr);
~Dialog2();
signals:
void valueChanged(QString value);
private slots:
void on_pushButton_clicked();
void on_lineEdit_textChanged(const QString &arg1);
private:
Ui::Dialog2 *ui;
};
#endif // DIALOG2_H
```
**dialog2.cpp**
```c++
#include "dialog2.h"
#include "ui_dialog2.h"
Dialog2::Dialog2(QWidget *parent) :
QDialog(parent),
ui(new Ui::Dialog2)
{
ui->setupUi(this);
}
Dialog2::~Dialog2()
{
delete ui;
}
void Dialog2::on_pushButton_clicked()
{
emit valueChanged(ui->lineEdit->text()); // 发射valueChanged信号
this->close(); // 关闭当前对话框
}
void Dialog2::on_lineEdit_textChanged(const QString &arg1)
{
emit valueChanged(arg1); // 发射valueChanged信号
}
```
在这个示例代码中,`Dialog1`有一个`lineEdit`和一个`pushButton`,当`pushButton`被点击时,会打开`Dialog2`。`Dialog2`有一个`lineEdit`和一个`pushButton`,当`pushButton`被点击时,会将`lineEdit`的值通过`valueChanged`信号发射出去。
`Dialog1`中连接了`Dialog2`的`valueChanged`信号和自己的`on_lineEdit_textChanged`槽函数,当`Dialog2`中的值改变时,`Dialog1`中的`lineEdit`也会跟着改变。
阅读全文