如何为主窗口创建的小部件创建 QCloseEvent

Posted

技术标签:

【中文标题】如何为主窗口创建的小部件创建 QCloseEvent【英文标题】:How can I create a QCloseEvent for a widget created by the mainwindow 【发布时间】:2018-03-04 01:49:31 【问题描述】:

我的 MainWindow 创建了一个名为 wid 的 QWidget。如何创建一个在该小部件关闭时激活的插槽?

【问题讨论】:

【参考方案1】:

您可以继承 QWidget 并添加如下功能:

class CloseableWidget: public QWidget 
    Q_OBJECT
public:
    CloseableWidget(QWidget* parent = nullptr): QWidget(parent) 
signals:
    void onClose(QCloseEvent* e);
protected:
    void closeEvent(QCloseEvent* e) override 
        emit onClose(e);
    
;

并创建CloseableWidget 的实例而不是QWidget,现在您可以将widonClose 信号连接到MainWindow 的插槽。

【讨论】:

我需要单独包含它吗?我收到以下错误:C2143:语法错误:缺少“;”在“*”错误之前:C4430:缺少类型说明符 - 假定为 int。注意:C++ 不支持 default-int 指针声明为:CloseableWidget *wid=new CloseableWidget; 将此添加到moc的单独头文件中 我只是把 closeWidget 类放在 mainwindow 类之后,并试图在 mainwindow 的声明中创建一个指向 closewidget 的指针。但现在可以了,谢谢!

以上是关于如何为主窗口创建的小部件创建 QCloseEvent的主要内容,如果未能解决你的问题,请参考以下文章

升级的小部件不会出现在使用qt designer创建的主应用程序中

如何为 StreamBuilder 生成的小部件设置动画?

PySide2 在设计师创建的小部件上绘制

如何为我的小部件添加边距?了解 EdgeInsets 的效果

如何为 Qt 创建自定义小部件

Qt入门系列开发教程基础控件篇QMainWindow主窗口