QT跨界面传输数据的一种方法

本文介绍了如何在Qt中,通过信号与槽机制实现从界面B(form)的LineEdit文本到界面A(mainwindow)Label的数据显示。通过在B界面设置信号,A界面定义槽并进行连接,实现了跨界面的数据传递。
摘要由CSDN通过智能技术生成

在开发当中,经常会遇到在A界面需要的数据,而这部分数据却处于B界面当中,以下有一种通过信号与槽的方法可以将数据传输到需要处理的界面当中。

目前有两个界面,界面A为mainwindow,界面B为form,下方的功能,是将B界面当中输入的文本,展示到A界面当中,以下为界面布局和文件名。

界面A当中只有一个Label,界面B当中有个Button和LineEdit

界面A:

界面B:

首先在界面B当中添加一个信号:

signals:
    void set1(QString txt);

之后转到界面B的cpp文件,在构造函数当中连接信号:

Form::Form(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Form)
{
    ui->setupUi(this);
    connect(ui->pushButton,&QPushButton::clicked,this,[=](){
        emit set1(ui->lineEdit->text());
    });
//lambda写法
}

于界面A的头文件,添加一个槽用于处理接收到的信号:

public slots:
    void get1(QString txt);

回到界面A的cpp文件,在构造函数当中处理接收到的信号:

void MainWindow::get1(QString txt)
{
    ui->label->setText(txt);
}

在界面A的构造函数当中,将界面B的信号与界面A的槽函数做连接:

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    connect(&form,SIGNAL(set1(QString)),this,SLOT(get1(QString)));
    form.show();
}

此时,在界面B当中输入的文字,可以正确的在界面A当中做显示,效果如下

完整代码:

Form.h:

#ifndef FORM_H
#define FORM_H

#include <QWidget>
#include <QString>

namespace Ui {
class Form;
}

class Form : public QWidget
{
    Q_OBJECT

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

signals:
    void set1(QString txt);

private:
    Ui::Form *ui;
};

#endif // FORM_H

Form.cpp:

#include "form.h"
#include "ui_form.h"

Form::Form(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Form)
{
    ui->setupUi(this);
    connect(ui->pushButton,&QPushButton::clicked,this,[=](){
        emit set1(ui->lineEdit->text());
    });
}

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

MainWindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include "form.h"
#include<QObject>

QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow;
}
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

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

public slots:
    void get1(QString txt);
private:
    Ui::MainWindow *ui;
    Form form;
};
#endif // MAINWINDOW_H

MainWindow.cpp

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

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    connect(&form,SIGNAL(set1(QString)),this,SLOT(get1(QString)));
    form.show();
}

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

void MainWindow::get1(QString txt)
{
    ui->label->setText(txt);
}

  • 22
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值