主窗口向子窗口传值的过程中,由于子窗口里的控件是其私有成员,所以主窗口不能直接访问。解决的方法是在子窗口中定义一个公有函数,通过调用此函数实现私有成员的访问。话不多说,看实现过程:
1.通过Qt Designer设计主窗口与子窗口
主窗口MainWindow包含一个按钮pushButton和一个文本编辑lineEdit
子窗口SubWidge包含一个标签label
2.程序:
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QPushButton>
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 <QWidget>
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上显示该文本信息
版权声明:本文为qinqinxiansheng原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。