我在QDockWidget
內有QStackedWidge
t - 取決於顯示哪個頁面我希望顯示/隱藏QDockWidget
上的關閉按鈕。我可以通過使用QDockWidget::setFeatures()
來做到這一點。如何捕獲QDockWidget關閉按鈕單擊事件
但是,我面臨的問題是如何捕捉關閉按鈕的信號,以便我可以更改停靠欄功能/設置堆疊的小部件頁面索引。
我試圖使用事件過濾器:
class EventFilter : public QObject
{
Q_OBJECT
public:
EventFilter(QObject* aParent);
protected:
bool eventFilter(QObject *obj, QEvent *event);
};
EventFilter::EventFilter(QObject* aParent)
: QObject(aParent)
{
}
bool EventFilter::eventFilter(QObject *obj, QEvent *event)
{
if (event->type() == QEvent::Close)
{
return true;
}
return QObject::eventFilter(obj, event);
}
並安裝它像這樣:
EventFilter* filter = new EventFilter(this);
u->dockWidget_6->installEventFilter(filter);
在我QMainWindow
的構造 - 該eventFilter()
方法沒打電話。
所以下次我試圖使用QDockWidget::visibilityChanged
改變的信號,因爲它聽起來像這可能是我想要的東西:
connect(u->dockWidget_6, SIGNAL(visibilityChanged(bool)), SLOT(dockWindowClosed(bool)));
此插槽沒有得到所謂的 - 但不是被點擊關閉按鈕時。
最後我試圖用升級的QDockWidget
來捕獲QWidget::closeEvent()
。
class DockWidgetWithCloseSignal : public QDockWidget
{
Q_OBJECT
public:
explicit DockWidgetWithCloseSignal(const QString &title, QWidget *parent = 0, Qt::WindowFlags flags = 0)
: QDockWidget(title, parent, flags)
{
}
explicit DockWidgetWithCloseSignal(QWidget *parent = 0, Qt::WindowFlags flags = 0)
: QDockWidget(parent, flags)
{
}
protected:
void closeEvent(QCloseEvent *event)
{
event->ignore();
}
};
我看到的構造被稱爲這意味着確實正在使用這種新的小工具,但再次被點擊關閉按鈕時從來沒有所謂,因爲closeEvent()
沒有喜悅。
我已經使用QObject :: destroyed()信號中描述的http://stackoverflow.com/questions/7091830/qt-destructor-call-for-closed-widget – vrogach 2015-04-28 14:00:44