制作主界面和子界面,添加QT Designer Form 选择Widget
主界面和子界面都包含一个TextEdit和一个PushButton
编译.ui文件生成.h文件,两个界面的头文件内容分别为
/********************************************************************************
** Form generated from reading UI file 'form.ui'
**
** Created by: Qt User Interface Compiler version 5.15.2
**
** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef UI_FORM_H
#define UI_FORM_H
#include <QtCore/QVariant>
#include <QtWidgets/QApplication>
#include <QtWidgets/QPushButton>
#include <QtWidgets/QTextEdit>
#include <QtWidgets/QWidget>
QT_BEGIN_NAMESPACE
class Ui_Form
{
public:
QTextEdit *textEdit;
QPushButton *pushButton;
void setupUi(QWidget *Form)
{
if (Form->objectName().isEmpty())
Form->setObjectName(QString::fromUtf8("Form"));
Form->resize(400, 300);
textEdit = new QTextEdit(Form);
textEdit->setObjectName(QString::fromUtf8("textEdit"));
textEdit->setGeometry(QRect(120, 60, 104, 71));
pushButton = new QPushButton(Form);
pushButton->setObjectName(QString::fromUtf8("pushButton"));
pushButton->setGeometry(QRect(100, 180, 75, 24));
retranslateUi(Form);
QMetaObject::connectSlotsByName(Form);
} // setupUi
void retranslateUi(QWidget *Form)
{
Form->setWindowTitle(QCoreApplication::translate("Form", "Form", nullptr));
pushButton->setText(QCoreApplication::translate("Form", "PushButton", nullptr));
} // retranslateUi
};
namespace Ui {
class Form: public Ui_Form {};
} // namespace Ui
QT_END_NAMESPACE
#endif // UI_FORM_H
/********************************************************************************
** Form generated from reading UI file 'form2.ui'
**
** Created by: Qt User Interface Compiler version 5.15.2
**
** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef UI_FORM2_H
#define UI_FORM2_H
#include <QtCore/QVariant>
#include <QtWidgets/QApplication>
#include <QtWidgets/QPushButton>
#include <QtWidgets/QTextEdit>
#include <QtWidgets/QWidget>
QT_BEGIN_NAMESPACE
class Ui_Form2
{
public:
QTextEdit *textEdit;
QPushButton *pushButton;
void setupUi(QWidget *Form)
{
if (Form->objectName().isEmpty())
Form->setObjectName(QString::fromUtf8("Form"));
Form->resize(400, 300);
textEdit = new QTextEdit(Form);
textEdit->setObjectName(QString::fromUtf8("textEdit"));
textEdit->setGeometry(QRect(130, 50, 104, 71));
pushButton = new QPushButton(Form);
pushButton->setObjectName(QString::fromUtf8("pushButton"));
pushButton->setGeometry(QRect(220, 180, 75, 24));
retranslateUi(Form);
QMetaObject::connectSlotsByName(Form);
} // setupUi
void retranslateUi(QWidget *Form)
{
Form->setWindowTitle(QCoreApplication::translate("Form", "Form", nullptr));
pushButton->setText(QCoreApplication::translate("Form", "PushButton", nullptr));
} // retranslateUi
};
namespace Ui {
class Form2: public Ui_Form2 {};
} // namespace Ui
QT_END_NAMESPACE
#endif // UI_FORM2_H
主界面的头文件和源文件
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QtWidgets>
#include <QString>
#include "frame.h"
#include "ui_form.h"
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
private:
Ui::Form *ui;
Frame *f1;
private slots:
void showChildWindow();
void getMsg(QString);
};
#endif // WIDGET_H
#include "widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
{
ui = new Ui::Form;
ui->setupUi(this);
f1 = new Frame();
connect(ui->pushButton, &QPushButton::clicked, this, &Widget::showChildWindow);
connect(f1, &Frame::sendSignal, this, &Widget::getMsg);
}
Widget::~Widget()
{
delete(ui);
delete(f1);
}
void Widget::showChildWindow(){
f1->show();
this->hide();
}
void Widget::getMsg(QString y){
this->show();
ui->textEdit->setText(y);
}
子界面的头文件和源文件
#ifndef FRAME_H
#define FRAME_H
#include <QWidget>
#include <QtWidgets>
#include <QString>
#include "ui_form2.h"
class Frame: public QWidget{
Q_OBJECT
public:
Frame(QWidget *parents=0);
~Frame();
private:
Ui::Form2 *ui;
private slots:
void btnClick();
signals:
void sendSignal(QString);
};
#endif // FRAME_H
#include "frame.h"
Frame::Frame(QWidget *parent)
: QWidget(parent)
{
ui = new Ui::Form2;
ui->setupUi(this);
connect(ui->pushButton, &QPushButton::clicked, this, &Frame::btnClick);
}
Frame::~Frame(){
delete(ui);
}
void Frame::btnClick(){
QString sendStr = ui->textEdit->toPlainText();
emit sendSignal(sendStr);
this->close();
}
main.cpp
#include "widget.h"
#include <QPushButton>
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}
具体说明:
主界面定义两个槽函数,一个是点击主界面的按钮,弹出子界面,另一个是接收子界面传回的字符串
对信号槽进行关联
子界面中定义一个信号函数和槽函数
关联信号槽
点击子界面的按钮,触发槽函数btnClick,调用信号函数,触发主界面的槽函数,实现向主界面发送字符串