qt的三种传值方式

1.使用发信号的方式传值

我在mainwindow里面添加了一个textedit用来接收传递过来的值,dialog里面添加了一个ok按钮和一个lineedit,可以在lineedit里面输入信息点击ok按钮时传递到主窗口。

dialog.h如下:


 
 
  1. #ifndef DIALOG_H
  2. #define DIALOG_H
  3. #include <QDialog>
  4. namespace Ui {
  5. class Dialog;
  6. }
  7. class Dialog : public QDialog
  8. {
  9. Q_OBJECT
  10. public:
  11. explicit Dialog(QWidget *parent = 0);
  12. ~Dialog();
  13. private slots:
  14. void on_pushButton_clicked();
  15. signals:
  16. void sendData(QString); //用来传递数据的信号
  17. private:
  18. Ui::Dialog *ui;
  19. };
  20. #endif // DIALOG_H

dialog.cpp如下:


 
 
  1. #include "dialog.h"
  2. #include "ui_dialog.h"
  3. Dialog::Dialog(QWidget *parent) :
  4. QDialog(parent),
  5. ui(new Ui::Dialog)
  6. {
  7. ui->setupUi(this);
  8. }
  9. Dialog::~Dialog()
  10. {
  11. delete ui;
  12. }
  13. void Dialog::on_pushButton_clicked()
  14. {
  15. emit sendData(ui->lineEdit->text()); //获取lineEdit的输入并且传递出去
  16. }


mainwindow.h如下:


 
 
  1. #ifndef MAINWINDOW_H
  2. #define MAINWINDOW_H
  3. #include <QMainWindow>
  4. namespace Ui {
  5. class MainWindow;
  6. }
  7. class MainWindow : public QMainWindow
  8. {
  9. Q_OBJECT
  10. public:
  11. explicit MainWindow(QWidget *parent = 0);
  12. ~MainWindow();
  13. private slots:
  14. void receiveData(QString data); //接收传递过来的数据的槽
  15. private:
  16. Ui::MainWindow *ui;
  17. };
  18. #endif // MAINWINDOW_H

mainwindow.cpp如下:


 
 
  1. #include "mainwindow.h"
  2. #include "ui_mainwindow.h"
  3. #include "dialog.h"
  4. MainWindow::MainWindow(QWidget *parent) :
  5. QMainWindow(parent),
  6. ui(new Ui::MainWindow)
  7. {
  8. ui->setupUi(this);
  9. Dialog *dlg = new Dialog;
  10. //关联信号和槽函数
  11. connect(dlg, SIGNAL(sendData(QString)), this, SLOT(receiveData(QString)));
  12. dlg->show();
  13. }
  14. MainWindow::~MainWindow()
  15. {
  16. delete ui;
  17. }
  18. void MainWindow::receiveData(QString data)
  19. {
  20. ui->textEdit->setText(data); //获取传递过来的数据
  21. }

main.cpp如下:


 
 
  1. #include "mainwindow.h"
  2. #include <QApplication>
  3. int main(int argc, char *argv[])
  4. {
  5. QApplication a(argc, argv);
  6. MainWindow w;
  7. w.show();
  8. return a.exec();
  9. }

最终的结果:

 

因为信号和槽可以是多对多的,所以,在类似多个窗体广播信息时,这种方式就很有用。

 

2.使用public形式的函数接口进行传值

    使用public函数接口的方式,要先确定是从父窗口向子窗口传值还是相反,前者的话可以在子窗口中创建一个public的方法来传递数据,在父窗口调用即可,后者的话正好相反,下面是父窗口向子窗口传值:

mainwindow.h如下:


 
 
  1. #ifndef MAINWINDOW_H
  2. #define MAINWINDOW_H
  3. #include <QMainWindow>
  4. namespace Ui
  5. {
  6. class MainWindow;
  7. }
  8. class MainWindow : public QMainWindow
  9. {
  10. Q_OBJECT
  11. public:
  12. explicit MainWindow(QWidget *parent = 0);
  13. ~MainWindow();
  14. public:
  15. void sendData(QString data); //在子窗口创建public函数用来获取传递的数据
  16. private:
  17. Ui::MainWindow *ui;
  18. };
  19. #endif // MAINWINDOW_H

mainwindow.cpp如下: 


 
 
  1. #include "mainwindow.h"
  2. #include "ui_mainwindow.h"
  3. MainWindow::MainWindow(QWidget *parent) :
  4. QMainWindow(parent),
  5. ui(new Ui::MainWindow)
  6. {
  7. ui->setupUi(this);
  8. }
  9. MainWindow::~MainWindow()
  10. {
  11. delete ui;
  12. }
  13. void MainWindow::sendData(QString data)
  14. {
  15. ui->textEdit->setText(data); //在textEdit中显示传递的数据
  16. }

dialog.cpp如下:


 
 
  1. #include "dialog.h"
  2. #include "ui_dialog.h"
  3. #include "mainwindow.h"
  4. Dialog::Dialog(QWidget *parent) :
  5. QDialog(parent),
  6. ui(new Ui::Dialog)
  7. {
  8. ui->setupUi(this);
  9. }
  10. Dialog::~Dialog()
  11. {
  12. delete ui;
  13. }
  14. void Dialog::on_pushButton_clicked()
  15. {
  16. MainWindow *w = new MainWindow;
  17. w->sendData(ui->lineEdit->text()); //直接调用public函数将本页面中lineEdit的数据传递过去
  18. w->show();
  19. }

main.cpp如下:


 
 
  1. //#include "mainwindow.h"
  2. #include "dialog.h"
  3. #include <QApplication>
  4. int main(int argc, char *argv[])
  5. {
  6. QApplication a(argc, argv);
  7. Dialog w;
  8. w.show();
  9. return a.exec();
  10. }

这种传值方式比较适用于父子窗口之间的传值调用。

 

3.使用全局变量进行传值

    在主界面上声明全局变量并为全局变量赋值,在子界面上声明外部变量即可:

dialog.cpp如下:


 
 
  1. #include "dialog.h"
  2. #include "ui_dialog.h"
  3. #include "mainwindow.h"
  4. QString globaldata; //声明一个全局变量用于窗体间传值
  5. Dialog::Dialog(QWidget *parent) :
  6. QDialog(parent),
  7. ui(new Ui::Dialog)
  8. {
  9. ui->setupUi(this);
  10. }
  11. Dialog::~Dialog()
  12. {
  13. delete ui;
  14. }
  15. void Dialog::on_pushButton_clicked()
  16. {
  17. globaldata = ui->lineEdit->text(); //获取lineEdit输入的值赋值给全局变量
  18. MainWindow *w = new MainWindow;
  19. w->show();
  20. }

mainwindow.cpp如下:


 
 
  1. #include "mainwindow.h"
  2. #include "ui_mainwindow.h"
  3. extern QString globaldata; //声明外部变量
  4. MainWindow::MainWindow(QWidget *parent) :
  5. QMainWindow(parent),
  6. ui(new Ui::MainWindow)
  7. {
  8. ui->setupUi(this);
  9. ui->textEdit->setText(globaldata); //对全局变量进行显示
  10. }
  11. MainWindow::~MainWindow()
  12. {
  13. delete ui;
  14. }

main.cpp如下:


 
 
  1. //#include "mainwindow.h"
  2. #include "dialog.h"
  3. #include <QApplication>
  4. int main(int argc, char *argv[])
  5. {
  6. QApplication a(argc, argv);
  7. Dialog w;
  8. w.show();
  9. return a.exec();
  10. }


 

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值