Я пытаюсь выполнить действие, когда пользователь нажимает на кнопку.
Мой код:
#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()
определяется как слот в заголовочном файле, и я уверен, что QPushButton *buttonBack
не нуль Что я делаю не так?
В моем коде я попытался также выполнить действие через QAction
, но в этом случае функция выполняется, когда я закрываю окно.
Похоже, вы устанавливаете все свои действия в деструкторе.
Подумайте, что это делает:
setupUi()
вызов от конструктораtest()
, Если вы хотите, чтобы это произошло, это круто, но если вы хотите, чтобы кнопка подключалась к слоту во время работы интерфейса, переместите createActions()
функция в конструкторе.
Удачи!
Других решений пока нет …