0

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

#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,但在这种情况下,当我关闭窗口时会执行功能。

4

1 回答 1

0

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

想想这是在做什么:

  1. UI 启动时setupUi()对构造函数的调用感到满意
  2. 在 UI 的整个生命周期中,没有分配给任何插槽的按钮。这意味着来自按钮的信号永远不会到达插槽test()
  3. 退出 UI 后,按钮将连接到插槽。

如果您希望这种情况发生,那很酷,但如果您希望按钮在 UI 运行时连接到插槽,请将您的createActions()函数移动到构造函数中。

祝你好运!

于 2014-04-11T13:39:44.320 回答