QT信号槽机制实现界面跳转和字符串传递

制作主界面和子界面,添加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,调用信号函数,触发主界面的槽函数,实现向主界面发送字符串

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值