本文介绍Qt窗体间值的传递方法。
基于图形窗口的应用程序在执行过程中,有时候会涉及到窗口间传递数据,如常见的父窗口-子窗口间,子窗口-子窗口间,传递数据的方式有多种,常见的有通过全局变量,静态变量,消息,获取父窗口指针等方式,本文介绍常用的2种,通过消息和获取父窗口指针的方法。
1.获取父窗口指针
此方法仅适用与父窗口-子窗口间的值的传递。对于Qt而言,子窗口获取父窗口指针的方法:
QWidget *QWidget::parentWidget() const
操作步骤:
1)分别在父,子窗口定义需要传值的public函数,如:
父窗口内函数定义:
class MainWindow : public QMainWindow
{Q_OBJECTpublic: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_OBJECTpublic:explicit Dialog(QWidget *parent = nullptr);~Dialog();public:void setValue(int v);int getValue(void);private:Ui::Dialog *ui;int a;private:void onPushButton(void);
};
2)值传递
在父窗口实例化子窗口后,可以通过子窗口指针调用setValue()和getValue()函数获取子窗口值,子窗口内可以通过parentWidget()函数获取父窗口指针,进而调用父窗口的setValue()和getValue()函数,从而达到双向值的传递。
如子窗口内:
void Dialog::onPushButton()
{MainWindow *widget = nullptr;widget = static_cast<MainWindow *>(QWidget::parentWidget());widget->setValue(6);
}
2.消息传递
对于Qt,这里的消息传递就是指通过信号和槽的机制来实现值的传递。
操作步骤:
1)分别在父,子窗口定义信号和槽函数,如:
父窗口内函数定义:
class MainWindow : public QMainWindow
{Q_OBJECTpublic: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_OBJECTpublic: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);
};
2)建立连接
如父窗口内:
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种方法。