简单明了,看效果+看代码
主窗口向子窗口进行传值和传结构体数据
子窗口向主窗口进行传值和传结构体数据
子窗口界面
主窗口界面
dialog.h
#ifndef DIALOG_H
#define DIALOG_H
#include <QDialog>
#include <QVariant>
namespace Ui {
class Dialog;
}
//结构体
struct m_data
{
int num;
QString name;
};
Q_DECLARE_METATYPE(m_data)//注册后的类型可以作为QVariant的自定义类型。这个宏应该放在类或者结构体外面的下面。
class Dialog : public QDialog
{
Q_OBJECT
public:
explicit Dialog(QWidget *parent = nullptr);
~Dialog();
signals:
void sendResetStr(QString);//子窗口向主窗口传值
void send_resetData(QVariant);//子窗口向主窗口传结构体数据
private slots:
void on_pushButton_clicked();//传值操作按钮
void recvStr(QString);//接收主窗口传的值
void recv_data(QVariant result);//接收主窗口传的结构体数据
private:
Ui::Dialog *ui;
};
#endif // DIALOG_H
dialog.cpp
#include "dialog.h"
#include "ui_dialog.h"
#include <QVariant>
Dialog::Dialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::Dialog)
{
ui->setupUi(this);
}
Dialog::~Dialog()
{
delete ui;
}
/* 传值操作按钮 */
void Dialog::on_pushButton_clicked()
{
//传值
QString resetStr = ui->value_lineEdit->text();
emit sendResetStr(resetStr);
//传结构体
m_data data;
QVariant variant;
data.num = ui->num_lineEdit->text().toInt();
data.name = ui->name_lineEdit->text();
variant.setValue(data);
emit send_resetData(variant);
}
/* 普通值 */
void Dialog::recvStr(QString value)
{
ui->value_lineEdit->setText(value);
}
/* 结构体 */
void Dialog::recv_data(QVariant result)
{
m_data data;
data = result.value<m_data>();
ui->num_lineEdit->setText(QString::number(data.num));
ui->name_lineEdit->setText(data.name);
}
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include "dialog.h"
class Dialog;
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
signals:
void sendStr(QString);//向子窗口传值
void send_data(QVariant);//向子窗口传结构体
private slots:
void on_pushButton_clicked();//传值操作按钮
void recvResetStr(QString);//接收子窗口回传的值
void recv_resetData(QVariant result);//接收子窗口回传的结构体
private:
Ui::MainWindow *ui;
Dialog *dlg;
};
#endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
dlg = new Dialog();
//主窗口向子窗口传值
QObject::connect(this,SIGNAL(sendStr(QString)),dlg,SLOT(recvStr(QString)));
//子窗口向主窗口传值
QObject::connect(dlg,SIGNAL(sendResetStr(QString)),this,SLOT(recvResetStr(QString)));
//主窗口向子窗口传结构体
connect(this,SIGNAL(send_data(QVariant)),dlg,SLOT(recv_data(QVariant)));
//子窗口向主窗口传结构体
connect(dlg,SIGNAL(send_resetData(QVariant)),this,SLOT(recv_resetData(QVariant)));
}
MainWindow::~MainWindow()
{
delete ui;
}
/* 传值操作按钮 */
void MainWindow::on_pushButton_clicked()
{
dlg->show();
dlg->setModal(true);
//主窗口向子窗口传值
QString sendValue = ui->value_lineEdit->text();
emit sendStr(sendValue);
//主窗口向子窗口传结构体
m_data data;
QVariant variant;
data.num = ui->num_lineEdit->text().toInt();
data.name = ui->name_lineEdit->text();
variant.setValue(data);
emit send_data(variant);
}
/* 获取子窗口回传的值 */
void MainWindow::recvResetStr(QString result)
{
ui->value_lineEdit->setText(result);
}
/* 获取子窗口回传的结构体 */
void MainWindow::recv_resetData(QVariant result)
{
m_data data;
data = result.value<m_data>();
ui->num_lineEdit->setText(QString::number(data.num));
ui->name_lineEdit->setText(data.name);
}
main.cpp
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
好了,到此就是窗口之间的传值和结构体数据的整个过程了。希望对你有帮助!!!