需要类似QWidget的完成信号

Lar*_*lla 13 qt signals qwidget

我正在寻找类似于完成信号的东西QDialog,仅用于QWidget.原因是,一旦窗口小部件弹出(我根本不是问题),我禁用我的工具栏,并且我希望在关闭窗口小部件后再次启用工具栏.

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

Fra*_*eld 19

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

widget->setAttribute( Qt::WA_DeleteOnClose );
connect( widget, SIGNAL(destroyed(QObject*)), this, SLOT(widgetDestroyed(QObject*)) );
Run Code Online (Sandbox Code Playgroud)

这只适用于你对小部件内容不感兴趣的情况.在destroyed()发射点时,窗口小部件QWidget不再是,只是一个QObject(destroyed()从发射出来~QObject),因此您不能再将该参数转换QObject*QWidget.

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


Liz*_*Liz 12

在您的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);

    }
Run Code Online (Sandbox Code Playgroud)

在该closeEvent方法中触发您的信号:

void MyCustomWidget::closeEvent(QCloseEvent *event)
{
      emit WidgetClosed();
      event->accept();
}
Run Code Online (Sandbox Code Playgroud)