QT5界面(窗口)之间传递参数

先简单概述一下窗口之间传递参数的机制–“张三去商店买烟”


分解动作:
谁?–张三
去哪?–商店
要干嘛?–买烟
怎么去?–走路去
结果?–张三得到烟

窗口(A):张三
信号(signal):想要买烟
连接方式(connect):走路去
结果(void):张三得到烟

窗口(B):商店
槽函数(slots):商店给张三烟

能看完的才能学到点东西。
如上所述:QT采用信号与槽函数实现不同窗口之间的参数传递,下面上代码示例:
mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include "dialog.h"

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
  Q_OBJECT

public:
  MainWindow(QWidget *parent = nullptr);
  ~MainWindow();
signals:
  void sendData(QString);//发送数据的信号,不需要实体函数,在头文件定义就可以
private slots:
  void on_pushButton_clicked();
  void getData(QString);//得到数据的槽函数
private:
  Ui::MainWindow *ui;
  Dialog *_interface = new Dialog();//初始化dialog窗口,实例化对象,可以在mainwindow中调用dialog的函数
};
#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(this,SIGNAL(sendData(QString)),_interface,SLOT(getData(QString)));
  connect(_interface,SIGNAL(sendData(QString)),this,SLOT(getData(QString)));
}

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

//点击按钮时,得到文本框的值并发送数据
void MainWindow::on_pushButton_clicked()
{
  QString strss = ui->lineEdit->text();
  emit sendData(strss);//发送数据,使用emit
//显示第二个窗口
  _interface->show();
}

//得到数据的槽函数
void MainWindow::getData(QString str2)
{
  ui->lineEdit_2->setText(str2);
}

dialog.h

#ifndef DIALOG_H
#define DIALOG_H
#include <QDialog>
namespace Ui {
  class Dialog;
}

class Dialog : public QDialog
{
  Q_OBJECT

public:
  explicit Dialog(QWidget *parent = nullptr);
  ~Dialog();
signals:
  void sendData(QString);//发送数据的信号
private slots:
  void on_pushButton_clicked();
  void getData(QString);//得到数据的槽函数
private:
  Ui::Dialog *ui;
};

#endif // DIALOG_H

dialog.cpp

#include "dialog.h"
#include "ui_dialog.h"

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

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

void Dialog::on_pushButton_clicked()
{
  QString str2 = ui->lineEdit_senddata->text();
  emit sendData(str2);

}

void Dialog::getData(QString str1)
{
  ui->lineEdit_getdata->setText(str1);
}

以上代码可以实现两个窗口之间相互传递参数。最主要的就是各个窗口把自己想要什么和自己能分享什么都列出来了,怎么连接他们尼?就是靠connect(),
connect(窗口A,窗口A的信号,窗口B,窗口B的槽函数)
分析下面这句话:
connect(this,SIGNAL(sendData(QString)),_interface,SLOT(getData(QString)));
连接这个窗口和_interface窗口,从这个窗口的sendData发送数据,_interface窗口的getData接收数据,信号和槽都是函数,只不过信号函数只需要在头文件里定义,不需要在源文件中实现函数体,而槽函数在头文件中定义之后还需要在原文件中实现函数的定义。

  • 14
    点赞
  • 60
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值