1.使用QT中的Signal&Slot机制进行传值
我在mainwindow里面添加了一个textedit用来接收传递过来的值,dialog里面添加了一个ok按钮和一个lineedit,可以在lineedit里面输入信息点击ok按钮时传递到主窗口。
dialog.h如下:
- <span style="font-family:Microsoft YaHei;font-size:12px;">#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_pushButton_clicked();
- signals:
- void sendData(QString); //用来传递数据的信号
- private:
- Ui::Dialog *ui;
- };
- #endif // DIALOG_H</span>
dialog.cpp如下:
- <span style="font-family:Microsoft YaHei;font-size:12px;">#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_pushButton_clicked()
- {
- emit sendData(ui->lineEdit->text()); //获取lineEdit的输入并且传递出去
- }
- </span>
mainwindow.h如下:
- <span style="font-family:Microsoft YaHei;font-size:12px;">#ifndef MAINWINDOW_H
- #define MAINWINDOW_H
- #include <QMainWindow>
- namespace Ui {
- class MainWindow;
- }
- class MainWindow : public QMainWindow
- {
- Q_OBJECT
- public:
- explicit MainWindow(QWidget *parent = 0);
- ~MainWindow();
- private slots:
- void receiveData(QString data); //接收传递过来的数据的槽
- private:
- Ui::MainWindow *ui;
- };
- #endif // MAINWINDOW_H
- </span>
mainwindow.cpp如下:
- <span style="font-family:Microsoft YaHei;font-size:12px;">#include "mainwindow.h"
- #include "ui_mainwindow.h"
- #include "dialog.h"
- MainWindow::MainWindow(QWidget *parent) :
- QMainWindow(parent),
- ui(new Ui::MainWindow)
- {
- ui->setupUi(this);
- Dialog *dlg = new Dialog;
- //关联信号和槽函数
- connect(dlg, SIGNAL(sendData(QString)), this, SLOT(receiveData(QString)));
- dlg->show();
- }
- MainWindow::~MainWindow()
- {
- delete ui;
- }
- void MainWindow::receiveData(QString data)
- {
- ui->textEdit->setText(data); //获取传递过来的数据
- }
- </span>
main.cpp如下:
- <span style="font-family:Microsoft YaHei;font-size:12px;">#include "mainwindow.h"
- #include <QApplication>
- int main(int argc, char *argv[])
- {
- QApplication a(argc, argv);
- MainWindow w;
- w.show();
- return a.exec();
- }
- </span>
最终的结果:
2.使用public形式的函数接口进行传值
使用public函数接口的方式,要先确定是从父窗口向子窗口传值还是相反,前者的话可以在子窗口中创建一个public的方法来传递数据,在父窗口调用即可,后者的话正好相反,下面是父窗口向子窗口传值:
mainwindow.h如下:
mainwindow.cpp如下:[html] view plain copy
- #ifndef MAINWINDOW_H
- #define MAINWINDOW_H
- #include <QMainWindow>
- namespace Ui {
- class MainWindow;
- }
- class MainWindow : public QMainWindow
- {
- Q_OBJECT
- public:
- explicit MainWindow(QWidget *parent = 0);
- ~MainWindow();
- public:
- void sendData(QString data); //在子窗口创建public函数用来获取传递的数据
- private:
- Ui::MainWindow *ui;
- };
- #endif // MAINWINDOW_H
dialog.cpp如下:[html] view plain copy
- #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::sendData(QString data)
- {
- ui->textEdit->setText(data); //在textEdit中显示传递的数据
- }
main.cpp如下:[html] view plain copy
- #include "dialog.h"
- #include "ui_dialog.h"
- #include "mainwindow.h"
- Dialog::Dialog(QWidget *parent) :
- QDialog(parent),
- ui(new Ui::Dialog)
- {
- ui->setupUi(this);
- }
- Dialog::~Dialog()
- {
- delete ui;
- }
- void Dialog::on_pushButton_clicked()
- {
- MainWindow *w = new MainWindow;
- w->sendData(ui->lineEdit->text()); //直接调用public函数将本页面中lineEdit的数据传递过去
- w->show();
- }
这种传值方式比较适用于父子窗口之间的传值调用。[html] view plain copy
- //#include "mainwindow.h"
- #include "dialog.h"
- #include <QApplication>
- int main(int argc, char *argv[])
- {
- QApplication a(argc, argv);
- Dialog w;
- w.show();
- return a.exec();
- }
3.使用全局变量进行传值
在主界面上声明全局变量并为全局变量赋值,在子界面上声明外部变量即可:
dialog.cpp如下:
mainwindow.cpp如下:[html] view plain copy
- #include "dialog.h"
- #include "ui_dialog.h"
- #include "mainwindow.h"
- QString globaldata; //声明一个全局变量用于窗体间传值
- Dialog::Dialog(QWidget *parent) :
- QDialog(parent),
- ui(new Ui::Dialog)
- {
- ui->setupUi(this);
- }
- Dialog::~Dialog()
- {
- delete ui;
- }
- void Dialog::on_pushButton_clicked()
- {
- globaldata = ui->lineEdit->text(); //获取lineEdit输入的值赋值给全局变量
- MainWindow *w = new MainWindow;
- w->show();
- }
main.cpp如下:[html] view plain copy
- #include "mainwindow.h"
- #include "ui_mainwindow.h"
- extern QString globaldata; //声明外部变量
- MainWindow::MainWindow(QWidget *parent) :
- QMainWindow(parent),
- ui(new Ui::MainWindow)
- {
- ui->setupUi(this);
- ui->textEdit->setText(globaldata); //对全局变量进行显示
- }
- MainWindow::~MainWindow()
- {
- delete ui;
- }
[html] view plain copy
- //#include "mainwindow.h"
- #include "dialog.h"
- #include <QApplication>
- int main(int argc, char *argv[])
- {
- QApplication a(argc, argv);
- Dialog w;
- w.show();
- return a.exec();
- }