方法1:信号和槽
- B窗口.h定义signals,cpp中适当位置emit该signal
- 窗口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
这种方法不需要包含头文件