• Qt窗体间值的传递方法


    本文介绍Qt窗体间值的传递方法。

    基于图形窗口的应用程序在执行过程中,有时候会涉及到窗口间传递数据,如常见的父窗口-子窗口间,子窗口-子窗口间,传递数据的方式有多种,常见的有通过全局变量,静态变量,消息,获取父窗口指针等方式,本文介绍常用的2种,通过消息和获取父窗口指针的方法。

    1.获取父窗口指针

    此方法仅适用与父窗口-子窗口间的值的传递。对于Qt而言,子窗口获取父窗口指针的方法:

    QWidget *QWidget::parentWidget() const

    操作步骤:

    1)分别在父,子窗口定义需要传值的public函数

    如:

    父窗口内函数定义

    1. class MainWindow : public QMainWindow
    2. {
    3. Q_OBJECT
    4. public:
    5. MainWindow(QWidget *parent = nullptr);
    6. ~MainWindow();
    7. public:
    8. void setValue(int v);
    9. int getValue(void);
    10. private:
    11. Ui::MainWindow *ui;
    12. int a;
    13. private:
    14. void onPushButton(void);
    15. };

    子窗口内函数定义:

    1. class Dialog : public QDialog
    2. {
    3. Q_OBJECT
    4. public:
    5. explicit Dialog(QWidget *parent = nullptr);
    6. ~Dialog();
    7. public:
    8. void setValue(int v);
    9. int getValue(void);
    10. private:
    11. Ui::Dialog *ui;
    12. int a;
    13. private:
    14. void onPushButton(void);
    15. };

    2)值传递

    在父窗口实例化子窗口后,可以通过子窗口指针调用setValue()和getValue()函数获取子窗口值,子窗口内可以通过parentWidget()函数获取父窗口指针,进而调用父窗口的setValue()和getValue()函数,从而达到双向值的传递。

    如子窗口内:

    1. void Dialog::onPushButton()
    2. {
    3. MainWindow *widget = nullptr;
    4. widget = static_cast(QWidget::parentWidget());
    5. widget->setValue(6);
    6. }

    2.消息传递

    对于Qt,这里的消息传递就是指通过信号和槽的机制来实现值的传递。

    操作步骤:

    1)分别在父,子窗口定义信号和槽函数

    如:

    父窗口内函数定义:

    1. class MainWindow : public QMainWindow
    2. {
    3. Q_OBJECT
    4. public:
    5. MainWindow(QWidget *parent = nullptr);
    6. ~MainWindow();
    7. public slots:
    8. void slotSetValue(int v);
    9. void slotGetValue(void);
    10. void slotValue(int v);
    11. signals:
    12. void sgnGetValue(void);
    13. void sgnSetValue(int v);
    14. void sgnValue(int v);
    15. private:
    16. Ui::MainWindow *ui;
    17. int a;
    18. private:
    19. void onPushButton(void);
    20. };

    子窗口内函数定义:

    1. class Dialog : public QDialog
    2. {
    3. Q_OBJECT
    4. public:
    5. explicit Dialog(QWidget *parent = nullptr);
    6. ~Dialog();
    7. public slots:
    8. void slotSetValue(int v);
    9. void slotGetValue(void);
    10. void slotValue(int v);
    11. signals:
    12. void sgnGetValue(void);
    13. void sgnSetValue(int v);
    14. void sgnValue(int v);
    15. private:
    16. Ui::Dialog *ui;
    17. int a;
    18. private:
    19. void onPushButton(void);
    20. };

    2)建立连接

    如父窗口内:

    1. void MainWindow::onPushButton()
    2. {
    3. Dialog *dialog = new Dialog(this);
    4. connect(dialog, &Dialog::sgnGetValue, this, &MainWindow::slotGetValue);
    5. connect(dialog, &Dialog::sgnSetValue, this, &MainWindow::slotSetValue);
    6. connect(dialog, &Dialog::sgnValue, this, &MainWindow::slotValue);
    7. connect(this, &MainWindow::sgnGetValue, dialog, &Dialog::slotGetValue);
    8. connect(this, &MainWindow::sgnSetValue, dialog, &Dialog::slotSetValue);
    9. connect(this, &MainWindow::sgnValue, dialog, &Dialog::slotValue);
    10. Q_EMIT sgnSetValue(3);
    11. dialog->exec();
    12. }

    这样,父,子窗口根据相应的信号和槽建立的联系,进而实现了值的传递。

    总结,本文介绍了Qt窗体间值的传递的2种方法。

  • 相关阅读:
    【深度学习实验】循环神经网络(三):门控制——自定义循环神经网络LSTM(长短期记忆网络)模型
    MySQL主从分离读写复制
    算法刷题第一天:二分查找
    2024上海智博会,上海国际智慧城市,物联网,大数据展会(世亚智博会)
    【数据结构】串的定义;存储结构;基本操作的实现
    【新日语习题集】第16課
    猿创征文|运维工具介绍
    支持向量机 (SVM) 算法详解
    机器内存充足,Java程序却报native内存OOM的问题记录
    Vuex状态管理最佳实践
  • 原文地址:https://blog.csdn.net/propor/article/details/133860130