按钮不执行操作

时间:2014-04-11 12:54:40

标签: 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) :
    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执行操作,但在这种情况下,当我关闭窗口时会执行函数。

1 个答案:

答案 0 :(得分:0)

看起来你在析构函数中设置了所有动作。

想想这是做什么的:

  1. UI启动时对构造函数的setupUi()调用感到满意
  2. 在UI的整个生命周期中,没有任何按钮分配给任何插槽。这意味着来自按钮的信号永远不会进入插槽test()
  3. 退出UI时,按钮连接到插槽。
  4. 如果您希望这样做,那很酷,但如果您希望在UI运行时按钮连接到插槽,请将createActions()功能移动到构造函数中。

    祝你好运!