QWidget
のためにQDialog
から終了信号のようなものを探しています。理由は、ウィジェットがポップアップするとツールバーを無効にします(これは問題ではありません)。ウィジェットが閉じられるとツールバーを再度有効にします。QWidgetから仕上げられた信号のようなものが必要です
ビジネスクラスでGUIコードを使用するため、そのウィジェットのクローズイベントをオーバーライドすることもできません。
QWidget
のためにQDialog
から終了信号のようなものを探しています。理由は、ウィジェットがポップアップするとツールバーを無効にします(これは問題ではありません)。ウィジェットが閉じられるとツールバーを再度有効にします。QWidgetから仕上げられた信号のようなものが必要です
ビジネスクラスでGUIコードを使用するため、そのウィジェットのクローズイベントをオーバーライドすることもできません。
あなたは近くに削除するウィジェットを設定し、そのdestroyed
信号を聞くことができます。
widget->setAttribute(Qt::WA_DeleteOnClose);
connect(widget, SIGNAL(destroyed(QObject*)), this, SLOT(widgetDestroyed(QObject*)));
ことだけをあなたがウィジェットの内容に興味がないなら動作します。ポイントdestroyed()
が発行された時点で、ウィジェットはもうQWidget
ではなく、QObject
(destroyed()
は~QObject
から放出される)なので、QObject*
をQWidget
にキャストすることはできません。
単純な代替方法は、QDialog
でウィジェットをラップすることです。
最初のものはかなりうまくいく、ありがとう。 – LarissaGodzilla
こんにちはFrank、 'widgetDestroyed'スロットはどうやって実装しますか? – SexyBeast
これは、ウィジェットが破壊されたときに何をしたいかによって異なりますが、スロットに何をするのかは一般的な答えはありません。 –
QWidgetは実際には多くの信号を持っていませんが、ドキュメントによると合計で2です。しかし、それは自分で信号を指定して使用することはできません。
あなたのウィジェットクラスでは、他の人が接続できる独自の信号を追加できます。次に、closeEvent()
メソッドをオーバーライドします。このメソッドをオーバーライドすることについて心配する必要はありません。このような状況はまさに正しい理由です。 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);
}
あなたの信号をトリガ:
void MyCustomWidget::closeEvent(QCloseEvent *event)
{
emit WidgetClosed();
event->accept();
}
私はすでにそれをしましたが、何らかの理由で私が思っていただけでなく、理解していないかもしれないと私のチームリーダーはそれを望んでいませんでした。しかし、私はそのことについて彼に話し、他の可能な方法がはるかに意味がないことを見ています。 – LarissaGodzilla
ウィジェットからの信号を送信しますか?あるいは 'destroyed()'シグナルをキャッチしますか? – RedX
最後の行は本当に意味をなさない。ウィジェットはGUIアイテムで、その閉じるイベントはGUIコードです。なぜそれを上書きすると、GUIとビジネスロジックが混在するのでしょうか? – Mat