我正在搜索来自QDialog
的完成信号,仅适用于QWidget
。原因是,一旦窗口小部件弹出,我就禁用了我的工具栏(这根本不是问题),并且我希望在窗口小部件关闭后再次启用工具栏。
我也无法覆盖该窗口小部件的close-Event,因为那时我们会在业务类中使用GUI代码。
答案 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个。但是,这并不意味着你不能自己指定信号并使用它,这可能是最好的方法。