QT多界面之间数据传输

前言

在Qt中,要在两个界面之间进行数据传输,有几种方法,我这里演示使用Qt的自定义信号来进行数据。程序的大概流程是,打开主界面,点击一个按钮,弹出子窗口,然后主窗口可以往子窗口发信息,子窗口也可以往主窗口发信息。
示例运行结果如下:
在这里插入图片描述

代码

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QDialog>
#include "dialog.h"
#include <QDebug>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private slots:
    void on_OpenDialog_clicked();

    void on_emitBtn_clicked();

    void setStr(QString&);

private:
    Ui::MainWindow *ui;

    Dialog *dialog;

signals:
    void mainWidgetStr(QString &);

};

#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);
    dialog = new Dialog(this);
    connect(dialog,SIGNAL(getStr(QString&)), this, SLOT(setStr(QString&)));
}

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

void MainWindow::on_OpenDialog_clicked()
{

    dialog->setModal(false);   //模态
    dialog->show();

}

void MainWindow::on_emitBtn_clicked()
{
    connect(this,SIGNAL(mainWidgetStr(QString &)),dialog,SLOT(mainWidgetStr(QString &)));
    QString str = ui->EmitLineEdit->text();
    emit mainWidgetStr(str);
}

void MainWindow::setStr(QString &str)
{
    ui->ReceiveLineEdit->setText(str);
}

dialog.h

#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>

namespace Ui {
class Dialog;
}

class Dialog : public QDialog
{
    Q_OBJECT

public:
    explicit Dialog(QWidget *parent = 0);
    ~Dialog();

private slots:
    void on_emitBtn_clicked();
    void mainWidgetStr(QString &);

private:
    Ui::Dialog *ui;
signals:
    void getStr(QString &str);
};

#endif // DIALOG_H

dialog.cpp

#include "dialog.h"
#include "ui_dialog.h"

Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)
{
    ui->setupUi(this);

}

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

void Dialog::on_emitBtn_clicked()
{
    QString str = ui->EmitLineEdit->text();
    emit getStr(str);
}

void Dialog::mainWidgetStr(QString &str)
{
    ui->ReceiveLineEdit->setText(str);
}

整个项目地址:https://download.csdn.net/download/matt45m/12055957

发布了79 篇原创文章 · 获赞 45 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/matt45m/article/details/103724512