C++ 按钮不执行操作

C++ 按钮不执行操作,c++,qt-creator,qt5.2,C++,Qt Creator,Qt5.2,当用户单击按钮时,我正在尝试执行操作。 我的代码是: #include "mainwindow.h" #include "ui_mainwindow.h" #include <QtUiTools/QUiLoader> #include <QFile> #include <QMessageBox> #include <QFileDialog> MainWindow::MainWindow(QWidget *parent) : QMainWi

当用户单击按钮时,我正在尝试执行操作。 我的代码是:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QtUiTools/QUiLoader>
#include <QFile>
#include <QMessageBox>
#include <QFileDialog>

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

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

void MainWindow::test()
{
    //QMessageBox::information(this, "Welcome", "Select first image.");
    //QFileDialog::getOpenFileName(this, QT_TR_NOOP("Open Image"), "D:\\", QT_TR_NOOP("Image Files (*.png *.jpg *.bmp)"));
    resize(100,500);
}

void MainWindow::createActions()
{
    QWidget *centralWidget = this->centralWidget();
    QPushButton *buttonBack = centralWidget->findChild<QPushButton *>("pushButton");
    QObject::connect(buttonBack,SIGNAL(clicked()), this, SLOT(test()));

    QAction *open = this->findChild<QAction *>("actionOpen");
    //QMessageBox::information(this, "Welcome", open->text());

    connect(open, SIGNAL(triggered()), this, SLOT(test()));
}
函数void MainWindow::test在头文件中定义为SLOT,我确信QPushButton*buttonBack不是空的。我做错了什么


在我的代码中,我还试图通过QAction执行操作,但在本例中,当我关闭窗口时,函数被执行。

看起来您正在析构函数中设置所有操作

想想这是在做什么:

UI通过构造函数的setupUi调用启动 在UI的整个生命周期中,没有为任何插槽分配任何按钮。这意味着来自按钮的信号永远不会到达插槽测试。 退出UI时,按钮连接到插槽。 如果希望发生这种情况,这很酷,但是如果希望在UI运行时按钮连接到插槽,请将createActions函数移动到构造函数中


祝你好运

您是否查看了调试输出?当它无法将信号连接到插槽时,它会发出抱怨。另一个解决方案是在Qt5中使用新的SIGNAL/SLOT语法。您是否在类声明中添加了Q_对象宏?否则,Ot元对象编译器moc将无法在该类上运行,并且信号和插槽将无法工作。@ChrisInked在输出中没有投诉,程序已退出,代码为0。但我会检查链接。谢谢。@maddin45是的,我的头文件中有Q_对象宏。但是谢谢。在析构函数中调用createActions方法似乎很奇怪: