Причина
QWidget
не имеет сигнала triggered
.
Решение
Я бы предложил вам:
Подкласс QWidget
и переопределение QWidget::closeEvent
Установите флажок QEvent::spontaneous
, чтобы различать нажатие кнопки закрытия и вызов QWidget::close
В соответствии с логикой вашего приложения либо вызовите QWidget::closeEvent(event);
, чтобы закрыть виджет, либо QEvent::ignore
, чтобы оставить его открытым
Пример
Я подготовил для вас пример того, как реализовать предложенное решение:
#include <QMainWindow>
#include <QCloseEvent>
#include <QPushButton>
class FooWidget : public QWidget
{
Q_OBJECT
public:
explicit FooWidget(QWidget *parent = nullptr) :
QWidget(parent) {
auto *button = new QPushButton(tr("Close"), this);
connect(button, &QPushButton::clicked, this, &FooWidget::close);
resize(300, 200);
setWindowTitle("Foo");
}
protected:
void closeEvent(QCloseEvent *event) override {
if (event->spontaneous()) {
qDebug("The close button was clicked");
// do event->ignore();
// or QWidget::closeEvent(event);
} else {
QWidget::closeEvent(event);
}
}
};
class MainWindow : public QMainWindow
{
Q_OBJECT
FooWidget *pWindow;
public:
explicit MainWindow(QWidget *parent = nullptr) :
QMainWindow(parent),
pWindow(new FooWidget()) {
pWindow->show();
}
};