Qt窗体间值的传递方法

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

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

1.获取父窗口指针

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

QWidget *QWidget::parentWidget() const

操作步骤:

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

如:

父窗口内函数定义:

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);
};

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_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);
};

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种方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值