需要来自QWidget的完成信号之类的东西



我正在寻找来自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个信号。然而,这并不意味着你不能自己指定一个信号并使用它,这可能是最好的方法。

相关内容

  • 没有找到相关文章

最新更新