Qt主窗口向子窗口传值

主窗口向子窗口传值的过程中,由于子窗口里的控件是其私有成员,所以主窗口不能直接访问。解决的方法是在子窗口中定义一个公有函数,通过调用此函数实现私有成员的访问。话不多说,看实现过程:

1.通过Qt Designer设计主窗口与子窗口

主窗口MainWindow包含一个按钮pushButton和一个文本编辑lineEdit
Qt主窗口向子窗口传值_第1张图片
子窗口SubWidge包含一个标签label
Qt主窗口向子窗口传值_第2张图片

2.程序:

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include 
#include 

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private:
    Ui::MainWindow *ui;

    private slots :
    void buttonEvent();//点击按钮的槽函数
};

#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "subwidge.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    //连接信号与槽
    connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(buttonEvent()));
}

MainWindow::~MainWindow()
{
    delete ui;
}

//点击按钮的槽函数,生成子窗口,并显示信息
void MainWindow::buttonEvent()
{
   //生成子窗口
  SubWidge *subw = new SubWidge();
  subw->show();
   //将主窗口的文本信息,传进子窗口
  subw->setText(ui->lineEdit->text());
}

subwidge.h

#ifndef SUBWIDGE_H
#define SUBWIDGE_H

#include 

namespace Ui {
class SubWidge;
}

class SubWidge : public QWidget
{
    Q_OBJECT

public:
    explicit SubWidge(QWidget *parent = nullptr);
    ~SubWidge();
    void setText(QString str);

private:
    Ui::SubWidge *ui;
};

#endif // SUBWIDGE_H

subwidge.cpp

#include "subwidge.h"
#include "ui_subwidge.h"

SubWidge::SubWidge(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::SubWidge)
{
    ui->setupUi(this);
}

SubWidge::~SubWidge()
{
    delete ui;
}

 void SubWidge::setText(QString str)
 {
     ui->label->setText(str);
 }

3.程序运行结果:

主窗口输入一条文本后,点击按钮
子窗口弹出,label上显示该文本信息
Qt主窗口向子窗口传值_第3张图片

你可能感兴趣的:(Qt)