QT窗口之间消息传递的一个小例子

例子描述:两个对话框类,Mainwindow和Dialog.通过点击Mainwindow上的弹出对话框按钮,弹出Dialog对话框
实现功能:点击Mainwindow上的“将文本框内容显示到子对话框中”按钮将Mainwindow的文本框内容传递到Dialog文本框显示,点击Dialog上的“将子窗口内容显示到父窗口”按钮,将Dialog文本框内容在的Mainwindow上显示。
QT窗口之间消息传递的一个小例子_第1张图片
QT窗口之间消息传递的一个小例子_第2张图片
mainwindow.h内容:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include 
#include 

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

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

private slots:
    void on_btn_new_dialog_clicked();//弹出子对话框

    void on_btn_showtext_on_dialog_clicked();

private:
    Ui::MainWindow *ui;
    Dialog *dlg;

public slots:
    void mainwindow_receive_a_signal(QString dia_to_main_msg);//定义接收Dialog窗口发来信号的槽函数
signals:
    void mainwindow_send_a_signal(QString main_to_dia_msg);//定义向Dialog窗口发送的信号
};

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

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

void MainWindow::on_btn_new_dialog_clicked()
{
    dlg = new Dialog;//实例化子窗口对象
    dlg->show();//非模态显示
    connect(dlg,SIGNAL(dialog_send_a_signal(QString)),this,SLOT(mainwindow_receive_a_signal(QString)));//绑定子窗口向主窗口发送消息的信号与槽
    connect(this,SIGNAL(mainwindow_send_a_signal(QString)),dlg,SLOT(dialog_receive_a_signal(QString)));//绑定主窗口向子窗口发送消息的信号与槽
}

//将子窗口发送来的数据显示到主窗口的textedit上
void MainWindow::mainwindow_receive_a_signal(QString dia_to_main_msg)
{
    ui->textEdit_on_mainwindow->setText(dia_to_main_msg);
}

//从主窗口textedit中获取数据,并发送给子窗口
void MainWindow::on_btn_showtext_on_dialog_clicked()
{
    emit mainwindow_send_a_signal(ui->textEdit_on_mainwindow->toPlainText());
}

dialog.h内容:

#ifndef DIALOG_H
#define DIALOG_H

#include 

namespace Ui {
class Dialog;
}

class Dialog : public QDialog
{
    Q_OBJECT

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

private:
    Ui::Dialog *ui;

signals:
    void dialog_send_a_signal(QString dia_to_main_msg);//定义子窗口向主窗口发送数据的信号

private slots:
    void on_btn_showtext_on_mainwindow_clicked();

    void dialog_receive_a_signal(QString main_to_dia_msg);//定义子窗口接收主窗口信号的槽函数
};

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

//获取子窗口textedi的数据,并发送给主窗口
void Dialog::on_btn_showtext_on_mainwindow_clicked()
{
    emit dialog_send_a_signal(ui->textEdit_on_dialog->toPlainText());
}
//接收主窗口发来的数据,并在子窗口textedit上显示
void Dialog::dialog_receive_a_signal(QString main_to_dia_msg)
{
    ui->textEdit_on_dialog->setText(main_to_dia_msg);
}

完整代码连接:
链接:https://pan.baidu.com/s/1cFMoQ0bYyJGkYp6wgr2eBg
提取码:ayw6

你可能感兴趣的:(QT)