我正在尋找類似QDialog
的完成信號,僅適用於QWidget
。原因是,一旦小部件彈出後我就禁用了我的工具欄(這根本不是問題),並且我希望工具欄在小部件關閉後再次啓用。需要類似QWidget的完成信號
我也無法重寫該小部件的close-Event,因爲那樣我們就會在業務類中擁有GUI代碼。
我正在尋找類似QDialog
的完成信號,僅適用於QWidget
。原因是,一旦小部件彈出後我就禁用了我的工具欄(這根本不是問題),並且我希望工具欄在小部件關閉後再次啓用。需要類似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
。
第一個工作得很好,謝謝。 – LarissaGodzilla
嗨,弗蘭克,我該如何實現'widgetDestroyed'插槽? – SexyBeast
這取決於當小部件被銷燬時你想要做什麼,沒有通用的答案在插槽中做什麼。 –
QWidget實際上並沒有很多信號,根據文檔它總共有2個。但是,這並不意味着你不能自己指定一個信號並使用它,這可能是最好的方法。
在你的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();
}
我已經這樣做了,但由於某種原因,我可能沒有理解得和我想的一樣,我的團隊領導者並沒有這樣想。但是我會和他談談這件事,看到其他可能的方式讓事情變得不那麼重要。 – LarissaGodzilla
從小部件發出信號?或者抓住'destroy()'信號? – RedX
你的最後一行沒有意義。小部件是GUI項目,其關閉事件是GUI代碼。爲什麼重寫會導致GUI和業務邏輯的混合? – Mat