我创建一个新的QWidget对象,我想知道何时按下关闭按钮。
我尝试过以下代码:
pWindow = new QWidget();
connect(pWindow , SIGNAL(triggered()), this, SLOT(processCloseButtonWindowsClicked()));
但它给出了一个错误:
pWindow无信号触发
如何实现这一目标?
Cause
QWidget
没有triggered
signal.
Solution
我建议你:
-
子类QWidget
并重新实现QWidget::closeEvent
-
Check QEvent::spontaneous区分点击关闭按钮和调用QWidget::close
-
根据您的应用程序的逻辑,要么调用QWidget::closeEvent(event);
关闭小部件,或者QEvent::ignore让它保持打开状态
Example
我为您准备了一个示例,说明如何实施建议的解决方案:
#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();
}
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)