पर मेरे पास QStackedWidge
टी QDockWidget
के भीतर है - इस पृष्ठ के आधार पर कि मैं 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)));
इस स्लॉट बुलाया मिला है - लेकिन जब बंद करें बटन क्लिक किया गया था।
अंततः मैंने QWidget::closeEvent()
पर कब्जा करने के लिए प्रचारित QDockWidget
का उपयोग करने का प्रयास किया।
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 :: नष्ट() संकेत का उपयोग किया है जैसा कि http://stackoverflow.com/questions/7091830/qt-destructor-call-for-closed-widget में वर्णित है – vrogach