Кнопка не выполняет действие

Я пытаюсь выполнить действие, когда пользователь нажимает на кнопку.
Мой код:

#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, но в этом случае функция выполняется, когда я закрываю окно.

0

Решение

Похоже, вы устанавливаете все свои действия в деструкторе.

Подумайте, что это делает:

  1. Пользовательский интерфейс запускается все довольны setupUi() вызов от конструктора
  2. На протяжении всего срока службы пользовательского интерфейса кнопки не назначаются никаким слотам. Это означает, что сигнал с вашей кнопки никогда не попадет в слот test(),
  3. При выходе из интерфейса кнопка подключается к слоту.

Если вы хотите, чтобы это произошло, это круто, но если вы хотите, чтобы кнопка подключалась к слоту во время работы интерфейса, переместите createActions() функция в конструкторе.

Удачи!

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]