2012-02-13 18 views
6

मेरे आवेदन के लिए उपयोगकर्ता को कई स्क्रीन के बीच स्विच करने की आवश्यकता है। जिस तरह से मैं यह कर रहा हूं, प्रत्येक स्क्रीन के लिए अलग-अलग QFrames बनाकर, और फिर मेनविंडो पर केंद्रीय विजेट्स के रूप में Qframes को सेट करना है। समस्या यह है कि हर बार जब मैं setCentralWidget (फ्रेम) को कॉल करता हूं, तो पुराना फ्रेम हटा दिया जाता है और मैं इसे बाद में एक्सेस नहीं कर सकता। उस पुराने फ्रेम को कैसे बचाया जा सकता है ताकि मैं इसे बाद में एक्सेस कर सकूं?क्यूटी QMainWindow केंद्रीय विजेट हटाना

कृपया मुझे बताएं कि क्या मैं अपने प्रश्न में अस्पष्ट हूं।

उत्तर

9

आप QMainWidow से अपने केंद्रीय विजेट को पुनर्स्थापित कर सकते हैं। फिर, आप नया केंद्रीय विजिट सेट कर सकते हैं;

QWidget* savedWidget = mainWnd->centralWidget(); 
savedWidget->setParent(0);//now it is saved 
mainWnd->setCentralWidget(newWidget); 

इसके अलावा का उपयोग कर QStackedWidget संभवतः बेहतर समाधान होगा।

+0

यह समाधान काम नहीं कर रहा है, QMainWindow को देखकर यह काम नहीं करना चाहिए। क्यूटी का कौन सा संस्करण आप उपयोग कर रहे हैं? – Kamath

+0

@ कामथ, '13 में वापस मैं शायद क्यूटी 4.8 का उपयोग कर रहा था। मैं थोड़ी देर के लिए क्यूटी का उपयोग नहीं कर रहा हूं और यह नहीं बता सकता, अगर यह मौजूदा संस्करणों के साथ काम करना चाहिए या नहीं, लेकिन मुझे इस व्यवहार को तोड़ने के लिए महत्वपूर्ण रूप से बदलने के लिए ऑब्जेक्ट मॉडल का कोई कारण नहीं दिख रहा है – Lol4t0

+0

यह नहीं है qmainwindow के लिए मेरा स्रोत सटीक ब्रैच जैसा है कि मेरे पास https://github.com/openwebos/qt/blob/master/src/gui/widgets/qmainwindow.cpp है, मैं सेट करता हूं setCurrentWidget कॉल हटाएं अगर अपडेट किया गया है। – Kamath

0

आप इसे पूरा करने के लिए उपयुक्त सबविड्ज पर .hide() /। Show() के साथ खेल सकते हैं। लेकिन आपके मामले के लिए एक बेहतर समाधान लगभग QTabWidget या QStackedWidget का उपयोग करना निश्चित रूप से है।

4

QStackedWidget इस समस्या के लिए एक सुरुचिपूर्ण समाधान है, आप यह पता लगा सकते हैं कि इसका उपयोग कैसे करें here

संबंधित मुद्दे