本文介绍Qt窗体间值的传递方法。
基于图形窗口的应用程序在执行过程中,有时候会涉及到窗口间传递数据,如常见的父窗口-子窗口间,子窗口-子窗口间,传递数据的方式有多种,常见的有通过全局变量,静态变量,消息,获取父窗口指针等方式,本文介绍常用的2种,通过消息和获取父窗口指针的方法。
此方法仅适用与父窗口-子窗口间的值的传递。对于Qt而言,子窗口获取父窗口指针的方法:
QWidget *QWidget::parentWidget() const
操作步骤:
如:
父窗口内函数定义:
- class MainWindow : public QMainWindow
- {
- Q_OBJECT
-
- public:
- MainWindow(QWidget *parent = nullptr);
- ~MainWindow();
-
- public:
- void setValue(int v);
- int getValue(void);
-
- private:
- Ui::MainWindow *ui;
- int a;
-
- private:
- void onPushButton(void);
- };
子窗口内函数定义:
- class Dialog : public QDialog
- {
- Q_OBJECT
-
- public:
- explicit Dialog(QWidget *parent = nullptr);
- ~Dialog();
-
- public:
- void setValue(int v);
- int getValue(void);
-
- private:
- Ui::Dialog *ui;
- int a;
-
- private:
- void onPushButton(void);
- };
在父窗口实例化子窗口后,可以通过子窗口指针调用setValue()和getValue()函数获取子窗口值,子窗口内可以通过parentWidget()函数获取父窗口指针,进而调用父窗口的setValue()和getValue()函数,从而达到双向值的传递。
如子窗口内:
- void Dialog::onPushButton()
- {
- MainWindow *widget = nullptr;
-
- widget = static_cast
(QWidget::parentWidget()); -
- widget->setValue(6);
- }
对于Qt,这里的消息传递就是指通过信号和槽的机制来实现值的传递。
操作步骤:
如:
父窗口内函数定义:
- class MainWindow : public QMainWindow
- {
- Q_OBJECT
-
- public:
- MainWindow(QWidget *parent = nullptr);
- ~MainWindow();
-
- public slots:
- void slotSetValue(int v);
- void slotGetValue(void);
- void slotValue(int v);
-
- signals:
- void sgnGetValue(void);
- void sgnSetValue(int v);
- void sgnValue(int v);
-
- private:
- Ui::MainWindow *ui;
- int a;
-
- private:
- void onPushButton(void);
- };
子窗口内函数定义:
- class Dialog : public QDialog
- {
- Q_OBJECT
-
- public:
- explicit Dialog(QWidget *parent = nullptr);
- ~Dialog();
-
- public slots:
- void slotSetValue(int v);
- void slotGetValue(void);
- void slotValue(int v);
-
- signals:
- void sgnGetValue(void);
- void sgnSetValue(int v);
- void sgnValue(int v);
-
- private:
- Ui::Dialog *ui;
- int a;
-
- private:
- void onPushButton(void);
- };
如父窗口内:
- void MainWindow::onPushButton()
- {
- Dialog *dialog = new Dialog(this);
-
- connect(dialog, &Dialog::sgnGetValue, this, &MainWindow::slotGetValue);
- connect(dialog, &Dialog::sgnSetValue, this, &MainWindow::slotSetValue);
- connect(dialog, &Dialog::sgnValue, this, &MainWindow::slotValue);
-
- connect(this, &MainWindow::sgnGetValue, dialog, &Dialog::slotGetValue);
- connect(this, &MainWindow::sgnSetValue, dialog, &Dialog::slotSetValue);
- connect(this, &MainWindow::sgnValue, dialog, &Dialog::slotValue);
-
- Q_EMIT sgnSetValue(3);
-
- dialog->exec();
- }
这样,父,子窗口根据相应的信号和槽建立的联系,进而实现了值的传递。
总结,本文介绍了Qt窗体间值的传递的2种方法。