Qt 需要像QWidget发出的完成信号这样的东西吗

Qt 需要像QWidget发出的完成信号这样的东西吗,qt,signals,qwidget,Qt,Signals,Qwidget,我正在从QDialog中搜索类似已完成信号的内容,仅搜索QWidget。原因是,一旦小部件弹出(这根本不是问题),我就会禁用我的工具栏,我希望在小部件关闭后再次启用工具栏 我也不能覆盖该小部件的关闭事件,因为这样我们就可以在业务类中使用GUI代码。QWidget实际上没有很多信号,根据文档,它总共有2个。然而,这并不意味着你不能自己指定一个信号并使用它,这可能是最好的方法。在你的小部件类中,你可以添加你自己的信号,其他人可以连接到它。然后重写closeEvent()方法。不必担心重写此方法,这种

我正在从
QDialog
中搜索类似已完成信号的内容,仅搜索
QWidget
。原因是,一旦小部件弹出(这根本不是问题),我就会禁用我的工具栏,我希望在小部件关闭后再次启用工具栏


我也不能覆盖该小部件的关闭事件,因为这样我们就可以在业务类中使用GUI代码。

QWidget实际上没有很多信号,根据文档,它总共有2个。然而,这并不意味着你不能自己指定一个信号并使用它,这可能是最好的方法。

在你的小部件类中,你可以添加你自己的信号,其他人可以连接到它。然后重写
closeEvent()
方法。不必担心重写此方法,这种情况正是正确的理由

class MyCustomWidget: public QWidget
{
   Q_OBJECT

    ...

    signals:
       void WidgetClosed();

   protected:

     //===============================================================
     // Summary: Overrides the Widget close event
     //  Allows local processing before the window is allowed to close.
     //===============================================================
     void closeEvent(QCloseEvent *event);

    }
closeEvent
方法中,触发您的信号:

void MyCustomWidget::closeEvent(QCloseEvent *event)
{
      emit WidgetClosed();
      event->accept();
}

您可以将小部件设置为在关闭时删除,然后收听其
已销毁的
信号:

widget->setAttribute( Qt::WA_DeleteOnClose );
connect( widget, SIGNAL(destroyed(QObject*)), this, SLOT(widgetDestroyed(QObject*)) );
但是,只有当您对小部件内容不感兴趣时,这才有效。当发出
destrocted()
时,小部件不再是
QWidget
,而是
QObject
(因为
destrocted()
是从
~QObject
发出的),因此您不能再将参数
QObject*
强制转换为
QWidget


一个简单的替代方法可能是用
QDialog

从小部件发出信号来包装小部件?或者捕获
destromed()
信号?您的最后一行没有意义。小部件是GUI项目,其关闭事件是GUI代码。为什么覆盖它会导致GUI和业务逻辑的混合?我已经这样做了,但由于某种原因,我可能没有像我认为的那样理解,我的团队领导不希望这样。但是我会和他谈谈这一点,看看其他可能的方法没有什么意义。嗨,弗兰克,我如何实现
widgetdemployed
插槽?这取决于当小部件被销毁时你想做什么,没有通用的答案在插槽中做什么。