gpt4 book ai didi

c++ - 如何检测QWidget的关闭按钮被按下?

转载 作者:行者123 更新时间:2023-11-30 02:17:50 30 4
gpt4 key购买 nike

我创建了一个新的 QWidget对象,我想知道何时按下关闭按钮。

我试过下面的代码:

pWindow = new QWidget();
connect(pWindow , SIGNAL(triggered()), this, SLOT(processCloseButtonWindowsClicked()));

但是报错:

no signal triggered of pWindow

如何实现?

最佳答案

原因

QWidget 没有触发信号。

解决方案

我建议你:

  1. 子类QWidget 并重新实现QWidget::closeEvent

  2. 检查 QEvent::spontaneous区分单击关闭按钮和调用 QWidget::close

  3. 根据您应用的逻辑,调用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();
}
};

关于c++ - 如何检测QWidget的关闭按钮被按下?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53164397/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com