我正在寻找来自QDialog
的已完成信号,仅用于QWidget
。原因是,我禁用了我的工具栏,一旦小部件弹出(这根本不是问题),我希望工具栏再次启用,一旦小部件被关闭。
我也不能覆盖该小部件的close-Event,因为那样我们将在业务类中使用gui代码。
可以设置小部件关闭时删除,然后监听其destroyed
信号:
widget->setAttribute( Qt::WA_DeleteOnClose );
connect( widget, SIGNAL(destroyed(QObject*)), this, SLOT(widgetDestroyed(QObject*)) );
这只适用于如果你不感兴趣的小部件内容。在发出destroyed()
时,小部件不再是QWidget
,而只是QObject
(因为destroyed()
是从~QObject
发出的),因此您不能再将参数QObject*
强制转换为QWidget
。
一个简单的替代方法可能是用QDialog
包装您的小部件。
在您的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();
}
QWidget实际上没有很多信号,根据文档,它总共有2个信号。然而,这并不意味着你不能自己指定一个信号并使用它,这可能是最好的方法。