Qt子窗口传值到父窗口

转载:Qt子窗口传值到父窗口_qt父子窗口传值_飞舞哲的博客-CSDN博客

不同窗口间的数值传递主要有三种方法:
1)使用Qt中的Signal&Slot机制进行传值
2) 使用public形式的函数接口进行传值
3) 使用全局变量进行传值

dialog.cpp和dialog.h 是主对话框的代码;dlg2.cpp和dlg2.h 是子对话框的代码。

#ifndef DIALOG_H
#define DIALOG_H
 
#include "dlg2.h"
#include <QDialog>
#include <QPushButton>
#include <QHBoxLayout>
#include <QLineEdit>
class Dialog : public QDialog
{
    Q_OBJECT
 
public:
    Dialog(QWidget *parent = 0);  
    QLineEdit *editshow;
private:
    QPushButton *btn;
    dlg2 *dlg22;
    QVBoxLayout *mainlayout;
 
private slots:
    void receiveData(QString data);   //接收传递过来的数据的槽
    void OnClickBtn();                //主窗口中的点击弹窗按钮的槽
};
 
#endif // DIALOG_H

dialog.cpp

#include "dialog.h"
#include "dlg2.h"
 
Dialog::Dialog(QWidget *parent)
    : QDialog(parent)
{
    setWindowTitle(tr("主窗口"));
    resize(300,300);
    setWindowFlags(Qt::WindowMinMaxButtonsHint|Qt::Window|Qt::WindowCloseButtonHint );
    
    mainlayout = new QVBoxLayout(this);
    editshow = new QLineEdit();
    editshow->setFixedHeight(80);   
    btn = new QPushButton();
    btn->setText(tr("点击弹窗"));
    mainlayout->addWidget(editshow);
    mainlayout->addWidget(btn);
 
    connect(btn, SIGNAL(clicked()), this, SLOT(OnClickBtn()));  //点击弹窗后的事件触发
}
 
void Dialog::OnClickBtn()
{
    dlg22 = new dlg2();  //创建子对话框对象
    connect(dlg22, SIGNAL(sendData(QString)), this, SLOT(receiveData(QString)));
    dlg22->show();  //弹窗会一直show出来,当有sendData信号时,对主对话框进行receive操作
}  
void Dialog::receiveData(QString data) 
{
    editshow->setText(data);     //获取传递过来的数据
}

dlg2.h

#ifndef DLG2_H
#define DLG2_H
#include <QString>
#include <QDialog>
#include <QLineEdit>
#include <QPushButton>
#include <QVBoxLayout>
 
class dlg2 : public QDialog
{
    Q_OBJECT
public:
    dlg2(QWidget *parent = 0);
    QLineEdit *editinput;
    QPushButton *okbtn;
    QVBoxLayout *layout1;
    QString str;
signals:
    void sendData(QString); //传递数据的信号
private slots:
    void OnClickOkBtn(); //子对话框的确定按钮的槽
};
#endif // DLG2_H

dlg2.cpp

#include "dlg2.h"
#include "dialog.h"
dlg2::dlg2(QWidget *parent)
    : QDialog(parent)
{
    setWindowTitle(tr("弹窗"));
    layout1 = new QVBoxLayout(this);
    editinput = new QLineEdit();
    okbtn = new QPushButton(tr("输入"));
    editinput->setFixedHeight(80);
 
    layout1->addWidget(editinput);
    layout1->addWidget(okbtn);
 //这个代码在之前的链接中没有,这个表示当点击确定按钮后,触发事件,即将输入数据存入str中
    connect(okbtn, SIGNAL(clicked()), this, SLOT(OnClickOkBtn()));
}
 
 
void dlg2::OnClickOkBtn()
{
    str = editinput->text();
    emit sendData(str);
}

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Qt中,主窗口窗口传值可以通过以下步骤完成: 1.在窗口中定义一个成员变量,用于存储主窗口传递过来的值。 2.在主窗口中创建窗口对象,并将需要传递的值作为参数传递给窗口的构造函数。 3.在窗口的构造函数中,将传递过来的值赋值给成员变量。 4.在需要使用传递过来的值的地方,通过调用窗口对象的成员函数来获取传递过来的值。 例如,如果窗口是一个对话框(QDialog),我们可以在窗口的头文件中定义一个成员变量: ```c++ class MyDialog : public QDialog { Q_OBJECT public: MyDialog(QWidget *parent = nullptr); ~MyDialog(); private: int m_value; }; ``` 然后在主窗口中创建窗口对象,并将需要传递的值作为参数传递给窗口的构造函数: ```c++ void MainWindow::on_pushButton_clicked() { MyDialog dialog(this, 10); dialog.exec(); } ``` 在窗口的构造函数中,将传递过来的值赋值给成员变量: ```c++ MyDialog::MyDialog(QWidget *parent) : QDialog(parent) { setWindowTitle("MyDialog"); } MyDialog::MyDialog(QWidget *parent, int value) : QDialog(parent) , m_value(value) { setWindowTitle("MyDialog"); } ``` 在需要使用传递过来的值的地方,通过调用窗口对象的成员函数来获取传递过来的值: ```c++ void MyDialog::on_pushButton_clicked() { QMessageBox::information(this, "Value", QString("Value is %1").arg(m_value)); } ``` 这样就完成了主窗口窗口传值的过程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值