Qt:多窗口传递参数

方法1:信号和槽

  1. B窗口.h定义signals,cpp中适当位置emit该signal
  2. 窗口A接受窗口B信号,在A中建立信号和槽。类B的signal触发A的槽

mainwindow.h

class MainWindow : public QMainWindow
{
    Q_OBJECT

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

private slots:
    void receiveMsg(QString);
    void openSubWin();

private:
    Ui::MainWindow *ui;
};

mainwindow.cpp 接受其它窗口的信号,借助信号和槽机制。其它类的signal触发相应窗口的槽

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    // SubWindow *subwindow = new SubWindow(this);
    // connect(subWindow, SIGNAL(sendText(QString)), this, SLOT(receiveMsg(QString))); 
    // 之前connect一直写在这里不好使,应为这个subwindow和下面show的subwindow不是一个实例,
    // 如果要在这里接受,需要在这里 subWindow->show
    connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(openSubWin()));
}

void MainWindow::receiveMsg(QString str)
{
    ui->label->setText(str);
}

void MainWindow::openSubWin() {
    SubWindow *subWindow = new SubWindow;
    connect(subWindow, SIGNAL(sendText(QString)), this, SLOT(receiveMsg(QString)));
    subWindow->show();
}

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

subwindow.h 在发出信号类的.h定义signals,cpp中适当位置emit该signal

class SubWindow : public QDialog
{
    Q_OBJECT

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

private slots:
    void onBtnClick();

private:
    Ui::SubWindow *ui;
signals: 
    void sendText(QString);
};

subwindow.cpp

SubWindow::SubWindow(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::SubWindow)
{
    ui->setupUi(this);
    connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(onBtnClick()));
}

void SubWindow::onBtnClick()
{
    emit sendText("hello qt");
}

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

方法2:全局变量

文件A在函数外

int a = 10

文件B在使用前:

extern int a

这种方法不需要包含头文件

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值