我正在Qt中写一个C++程序,程序的本质是一个窗口有三个按钮,每个按钮打开一个新窗口,并且必须将它的编号传递给它,就像第一个按钮是第一个按钮一样,并且很快。但我做不到,来自一个窗口的信号根本不会传递到第二个窗口,我决定用一个简单的例子来弄清楚,当我们按下按钮时,一个信号刚刚发生,第二个窗口应该捕捉到它并显示“已打开!” 我是这样做的:
主窗口.h:
#include <QMainWindow>
#include "mathwindow.h"
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private slots:
void openNewWindow();
signals:
void buttonN();
private:
Ui::MainWindow *ui;
};
主窗口.cpp:
#include "mainwindow.h"
#include "ui_mainwindow.h"
mathwindow *math;
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
connect(ui->pushButton,SIGNAL(clicked()),this,SLOT(openNewWindow()));
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::openNewWindow() {
math = new mathwindow();
math->show();
emit buttonN();
}
数学窗口.h:
#include <QWidget>
#include "mainwindow.h"
namespace Ui {
class mathwindow;
}
class mathwindow : public QWidget
{
Q_OBJECT
public:
explicit mathwindow(QWidget *parent = nullptr);
~mathwindow();
public slots:
void grabValue();
private:
Ui::mathwindow *ui;
};
数学窗口.cpp
#include "mathwindow.h"
#include "ui_mathwindow.h"
#include <QDebug>
mathwindow::mathwindow(QWidget *parent) :
QWidget(parent),
ui(new Ui::mathwindow)
{
ui->setupUi(this);
MainWindow var;
connect(&var,SIGNAL(buttonN()),this,SLOT(grabValue()));
}
mathwindow::~mathwindow()
{
delete ui;
}
void mathwindow::grabValue() {
qDebug()<<"OPENED!!";
}
并且由于某种原因没有显示该单词OPENED!!,我怀疑这是因为我在一个函数中打开了第二个窗口并立即生成了一个信号,请帮助我如何实现?
这样当第二个窗口打开时,所需的信号就会立即传输给它。
你可以这样做 - 这里
mathwindow是主窗口类的一个字段(参见 MainWindow 类底部的 _mathWindow 对象):数学窗口.h:
数学窗口.cpp: