我创建了一个新的QWidget对象,我想知道何时按下关闭按钮。
我尝试了以下代码:
pWindow = new QWidget();
connect(pWindow , SIGNAL(triggered()), this, SLOT(processCloseButtonWindowsClicked()));
Run Code Online (Sandbox Code Playgroud)
但它给出了一个错误:
pWindow 无信号触发
如何实现这一目标?
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();
}
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3160 次 |
| 最近记录: |