《Qt》part 4 Qt5.5.0窗口之间传值(二)

来源:互联网 发布:腾讯dns优化器手机版 编辑:程序博客网 时间:2024/06/03 01:55

part 4 Qt5.5.0窗口之间传值(二)

二、Public传值(二):主窗口传给子窗口

1、主窗口与子窗口之间传值:

主窗口为ParentChild,继承MainWindow类

子窗口为TestDialog,继承QDialog类

1)ParentChild:


(1)parentchild.h

点击按钮来触发传参

#ifndef PARENTCHILD_H#define PARENTCHILD_H#include <QtWidgets/QMainWindow>#include "ui_parentchild.h"#include "testdialog.h"#include "ui_testdialog.h"class ParentChild : public QMainWindow{Q_OBJECTpublic:ParentChild(QWidget *parent = 0);~ParentChild();private slots:void pushButton_clicked();private:Ui::ParentChild ui;};#endif // PARENTCHILD_H

(2)parentchild.cpp

#include "parentchild.h"ParentChild::ParentChild(QWidget *parent): QMainWindow(parent){ui.setupUi(this);this->setWindowTitle(QString::fromLocal8Bit("窗口传参测试—主窗口"));connect(ui.pushButton, SIGNAL(clicked()), this, SLOT(pushButton_clicked()));}ParentChild::~ParentChild(){}voidParentChild::pushButton_clicked(){TestDialog *w = new TestDialog;w->dlgReturn(ui.lineEdit_1->text());w->show();}


2)TestDialog:

(1)testdialog.h
#ifndef TESTDIALOG_H#define TESTDIALOG_H#include <QtWidgets/QDialog>#include "ui_testdialog.h"class TestDialog : public QDialog{Q_OBJECTpublic:TestDialog(QWidget *parent = 0);~TestDialog();public:void dlgReturn(QString data);private:Ui::TestDialog ui;};#endif // TESTDIALOG_H
(2)testdialog.cpp
#include "testdialog.h"/////////////////////////////#include "ui_parentchild.h"#include "parentchild.h"/////////////////////////////TestDialog::TestDialog(QWidget *parent): QDialog(parent){ui.setupUi(this);this->setWindowTitle(QString::fromLocal8Bit("窗口传参测试—子窗口"));}TestDialog::~TestDialog(){}voidTestDialog::dlgReturn(QString data){ui.lineEdit->setText(data);}

3)main.cpp
此时用的是主窗口的头文件,首先弹出来的也是主窗口
/////////////////////////////#include "parentchild.h"//#include "testdialog.h"/////////////////////////////#include <QtWidgets/QApplication>int main(int argc, char *argv[]){QApplication a(argc, argv);ParentChild w;//TestDialog w;w.show();return a.exec();}
运行:

三、全局变量传参

1、子窗口传参给主窗口

主窗口为ParentChild,继承MainWindow类

子窗口为TestDialog,继承QDialog类

1)ParentChild:


(1)testdialog.h
#ifndef TESTDIALOG_H#define TESTDIALOG_H#include <QtWidgets/QDialog>#include "ui_testdialog.h"class TestDialog : public QDialog{Q_OBJECTpublic:TestDialog(QWidget *parent = 0);~TestDialog();private slots://私有槽void pushButtonPressed();private:Ui::TestDialog ui;};#endif // TESTDIALOG_H
(2)testdialog.cpp
#include "testdialog.h"/////////////////////////////#include "ui_parentchild.h"#include "parentchild.h"QString globaldata;      //声明一个全局变量用于窗体间传值 /////////////////////////////TestDialog::TestDialog(QWidget *parent): QDialog(parent){ui.setupUi(this);this->setWindowTitle(QString::fromLocal8Bit("窗口传参测试—子窗口"));connect(ui.pushButton_ok, SIGNAL(clicked()), this, SLOT(pushButtonPressed()));}TestDialog::~TestDialog(){}void TestDialog::pushButtonPressed(){globaldata = ui.lineEdit->text(); //获取lineEdit输入的值赋值给全局变量 //ui.lineEdit->setText(globaldata);ParentChild *w = new ParentChild;w->update();w->show();}

2)ParentChild
(1)parentchild.h
#ifndef PARENTCHILD_H#define PARENTCHILD_H#include <QtWidgets/QMainWindow>#include "ui_parentchild.h"#include "testdialog.h"#include "ui_testdialog.h"class ParentChild : public QMainWindow{Q_OBJECTpublic:ParentChild(QWidget *parent = 0);~ParentChild();private slots://私有槽void pushButton_clicked();private:Ui::ParentChild ui;};#endif // PARENTCHILD_H

(2)parentchild.cpp
#include "parentchild.h"////////////////////////////#include "ui_parentchild.h"extern QString globaldata;      //声明外部变量 ///////////////////////////ParentChild::ParentChild(QWidget *parent): QMainWindow(parent){ui.setupUi(this);this->setWindowTitle(QString::fromLocal8Bit("窗口传参测试—主窗口"));ui.label->setText(globaldata);       //对全局变量进行显示ui.lineEdit_1->setText(globaldata);       //对全局变量进行显示 connect(ui.pushButton, SIGNAL(clicked()), this, SLOT(pushButton_clicked()));}ParentChild::~ParentChild(){}voidParentChild::pushButton_clicked(){TestDialog *w = new TestDialog;/*w->dlgReturn(ui.lineEdit_1->text());*/w->show();}

3)main.cpp
/////////////////////////////#include "parentchild.h"#include "testdialog.h"/////////////////////////////#include <QtWidgets/QApplication>int main(int argc, char *argv[]){QApplication a(argc, argv);ParentChild w1;//TestDialog w2;w1.show();//w2.show();return a.exec();}
运行:
由于在子窗口中点击确认按钮后会触发信号槽,在槽函数中有new了一个新的主窗口,所以每次在子窗口中点击确认按钮后,都会弹出新的主窗口来,而之前的没关掉。




0 0