2. QT窗体间值的传递

一、主窗体与子窗体传参

方法有很多,这里介绍一种通过重载子窗体的构造函数实现主窗体参数传入到子窗体,并通过QT信号和槽的机制实现子窗口到主窗口值的传递。

主和子窗体的设置如下:

主要实现功能为:

1 主窗口LineEdit控件按下Enter键后,弹出Dialog窗体并显示与主窗体一样的内容;

2 子窗体按下pushButton按钮后,主窗口显示子窗口内容。

二、功能1  主窗体到子窗体传值

头文件如下:

子窗体:

 1 #ifndef DIALOG_H
 2 #define DIALOG_H
 3 
 4 #include <QDialog>
 5 #include <QString>
 6 
 7 namespace Ui {
 8 class Dialog;
 9 }
10 
11 class Dialog : public QDialog
12 {
13     Q_OBJECT
14 
15 public:
16     Dialog(QWidget *parent = 0);
17     Dialog(QWidget *parent,QString S);  // 构造函数 传值
18 
19     ~Dialog();
20 
21 signals:
22     void sendQString(QString);
23 
24 
25 private slots:
26     void on_pushButton_clicked();
27 
28 private:
29     Ui::Dialog *ui;
30     QString myS;  // 接受主窗体传值
31 };
32 
33 #endif // DIALOG_H

主窗体:

 1 #ifndef MAINWINDOW_H
 2 #define MAINWINDOW_H
 3 
 4 #include <QMainWindow>
 5 #include "dialog.h"
 6 
 7 namespace Ui {
 8 class MainWindow;
 9 }
10 
11 class MainWindow : public QMainWindow
12 {
13     Q_OBJECT
14 
15 public:
16     MainWindow(QWidget *parent = 0);
17     ~MainWindow();
18 
19 private slots:
20     void receiveSINGAL(QString S);  //  接受子窗体信号的槽函数
21 
22     void sendQStringToDialog();  //  Enter建按下的槽函数
23 
24 
25 private:
26     Ui::MainWindow *ui;
27     Dialog *myDialog;  // 子窗体
28 };
29 
30 #endif // MAINWINDOW_H

源文件:

子窗体:

 1 #include "dialog.h"
 2 #include "ui_dialog.h"
 3 
 4 Dialog::Dialog(QWidget *parent) :
 5     QDialog(parent),
 6     ui(new Ui::Dialog)
 7 {
 8     ui->setupUi(this);
 9 }
10 
11 Dialog::Dialog(QWidget *parent, QString S):
12     QDialog(parent),
13     myS(S),
14     ui(new Ui::Dialog)
15 {
16     ui->setupUi(this);
17     ui->lineEdit->setText(myS);
18 }
19 
20 Dialog::~Dialog()
21 {
22     delete ui;
23 }
24 
25 void Dialog::on_pushButton_clicked()
26 {
27     emit sendQString(ui->lineEdit->text());
28 }

主窗体:

 1 #include "mainwindow.h"
 2 #include "ui_mainwindow.h"
 3 
 4 MainWindow::MainWindow(QWidget *parent) :
 5     QMainWindow(parent),
 6     ui(new Ui::MainWindow)
 7 {
 8     ui->setupUi(this);
 9     connect(ui->lineEdit,SIGNAL(returnPressed()),this,SLOT(sendQStringToDialog()));
10     //myDialog->show();
11 }
12 
13 MainWindow::~MainWindow()
14 {
15     delete ui;
16 }
17 
18 void MainWindow::receiveSINGAL(QString S)
19 {
20     ui->lineEdit->setText(S);
21 }
22 
23 void MainWindow::sendQStringToDialog()
24 {
25     myDialog = new Dialog(this,ui->lineEdit->text());
26     connect(myDialog,SIGNAL(sendQString(QString)),this,SLOT(receiveSINGAL(QString)));
27     myDialog->show();
28 }

思想:主窗体首先定义一个按下Enter建后触发的槽sendQStringToDialog,在槽中实现重载的构造函数创建子窗体,并将值传入给Dialog中的LineEdit,最后建立信号和槽的连接connect(ui->lineEdit,SIGNAL(returnPressed()),this,SLOT(sendQStringToDialog()));

二、功能2  子窗体到主窗体传值


利用信号和槽的机制,在子窗体中定义一个信号sendQString,用于传值,并且在pushButton按钮按下的槽函数中发送信号。同时在主窗体定义一个接受信号的槽,并在槽中完成数据的传递。

如下:

PS:感谢网上的资源

原文地址:https://www.cnblogs.com/zyore2013/p/4662911.html