需要类似QWidget的完成信号

时间:2011-10-28 10:46:16

标签: qt signals qwidget

我正在搜索来自QDialog的完成信号,仅适用于QWidget。原因是,一旦窗口小部件弹出,我就禁用了我的工具栏(这根本不是问题),并且我希望在窗口小部件关闭后再次启用工具栏。

我也无法覆盖该窗口小部件的close-Event,因为那时我们会在业务类中使用GUI代码。

3 个答案:

答案 0 :(得分:18)

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

widget->setAttribute( Qt::WA_DeleteOnClose );
connect( widget, SIGNAL(destroyed(QObject*)), this, SLOT(widgetDestroyed(QObject*)) );

这只适用于您对小部件内容不感兴趣的情况。在发出destroyed()点时,窗口小部件不再是QWidget,只有QObject(从destroyed()发出~QObject),所以你不能再将参数QObject*强制转换为QWidget

一个简单的替代方法可能是使用QDialog包装您的小部件。

答案 1 :(得分:10)

在您的Widget类中,您可以添加其他人可以连接的信号。然后覆盖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();
}

答案 2 :(得分:0)

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