2013-05-09 6 views
7

मेरे पास एक QGLWidget है, जिसे मैं किसी दिए गए रिज़ॉल्यूशन (युक्त विंडो से बड़ा) का आकार बदलना चाहता हूं। मेरा इरादा यह है कि जब तक विजेट अंदर फिट बैठता है तब तक खिड़की फैली हुई है, लेकिन इसे करने का कोई तरीका नहीं मिल रहा है।सामग्री फिट करने के लिए विंडो का आकार बदलें

मैंने सफलता के बिना काम करने के लिए QGLWidget का आकार बदलने के बाद कई आदेशों का प्रयास किया। मैं यहां परिणामों की सूची दूंगा:

  • कुछ और नहीं करें: विजेट पूरी विंडो ओवरलैप करता है। अंततः यह छोटे विंडो में वापस फिट करने के लिए
  • mainWindow.adjustSize() बदल दिया जाएगा: विजेट का आकार बदला जाता है (0, 0)
  • mainWindow.resize(mainWindow.sizeHint()): उपरोक्त
  • mainWindow.resize(mainWindow.minimumSizeHint()) देखें: ऊपर

मैं भी पढ़ देखना this thread में, मुख्यविंडो आकार बदलने से पहले I ईवेंट लूप को नए आकारों को फिर से समझने के लिए चलाने की आवश्यकता है, इसलिए मैंने ऐसा करने के लिए QCoreApplication::processEvents डाला, बिना किसी दृश्य प्रभाव के।

तो मैं विजेट के माध्यम से विंडो का आकार कैसे बदलूं?

संपादित

GLWidget विंडो के विजेट केवल नहीं है। यह एक समूह बॉक्स के साथ स्प्लिटर में एम्बेडेड है।

उत्तर

6

http://qt-project.org/doc/qt-4.8/qwidget.html#sizePolicy-prop

http://qt-project.org/doc/qt-4.8/qsizepolicy.html#Policy-enum

http://qt-project.org/doc/qt-4.8/qwidget.html#setFixedSize

तो यह सोचते हैं आप अपने QGLWidget केंद्रीय विजेट के रूप में अपने QMainWindow अंदर नेस्टेड है, तो आप अपने QGLWidget के आकार नीति सेट करना होगा।

उदाहरण के लिए:

QGLWidget * glw; // in your header for QMainWindow 

...

// In your constructor for QMainWindow 
glw = new QGLWidget; 
this->setCentralWidget(glw); 
glw->setFixedSize(500, 500); 

this->adjustSize(); 

आशा है कि मदद करता है।

+0

हालांकि यह वास्तव में जरूरत आकार इसे आगे उपयोगकर्ता द्वारा आकार बदलने से रोकता खिड़की का आकार बदलता है:

खिड़की और छवि विजेट इस कोड के साथ छवियों के मूल आकार में बदल जा सकता है। प्रलेखन से: 'विजेट के न्यूनतम और अधिकतम दोनों आकारों को सेट करता है, जिससे इसे कभी भी बढ़ने या घटने से रोकता है।' मैंने बस पुराने न्यूनतम और अधिकतम आकार को सहेजने और पुनर्स्थापित करने का प्रयास किया, लेकिन इसके परिणामस्वरूप कोई बदलाव नहीं हुआ । – Nobody

+0

'setFixedSize() 'के बजाय,' setMinimumSize()' का प्रयास करें, और 'setSizePolicy() 'का उपयोग करें। 'SetSizePolicy()' का उपयोग करके चीजों का विस्तार और प्रतिक्रिया कैसे होती है, इस पर आपके पास वास्तव में बहुत अधिक नियंत्रण है। 'setFixedSize()' एक बार में चीजों का एक गुच्छा करता है, इसलिए शायद यह नहीं है कि आप इस मामले में क्या चाहते हैं। – phyatt

+0

'न्यूनतम आकार' भी मुझे गलत बात लगता है। उपयोगकर्ता मनमाने ढंग से आकार बदलने में सक्षम होना चाहिए। मुझे बस उस आकार पर पॉप करने की आवश्यकता है जो 'QGLWidget' के अनुरोधित आकार को फिट करे। – Nobody

1

मेरे पास एक ऐप है जो आपकी आवश्यकताओं के समान होने की आवश्यकता है, इसलिए मैं अपना समाधान यहां पोस्ट करूंगा। खिड़की को कवर करने वाली एक छवि जो स्वतंत्र रूप से विस्तारणीय और संकुचित है, और इसे मूल आकार में बदला जा सकता है, और इसके बाद विस्तारणीय/संक्रमणीय रह सकता है।

मैंने छवि को प्रदर्शित करने के लिए एक QLabel विजेट का उपयोग किया, लेकिन इसे अन्य विजेट प्रकारों के साथ भी काम करना चाहिए। मैंने विजेट को प्रारंभिक आकार और QSizePolicy::Ignored के साथ बनाया है।

label->resize (w, h); // initial size 
label->setSizePolicy (QSizePolicy::Ignored, QSizePolicy::Ignored); 

लेबल विजेट विंडो में कुछ बटन के साथ एक QVBoxLayout में था, लेकिन यह अन्य लेआउट प्रकार के साथ भी काम कर सकते हैं।

label->resize (w, h); // change to original size 
label->setMinimumSize (w, h); // prevent it from collapsing to zero immediately 
window->adjustSize(); // resize the window 
label->setMinimumSize (0, 0); // allow shrinking afterwards 
+0

लेता है दुर्भाग्यवश, यह मेरे लिए काम नहीं करता है। विजेट का आकार बदल गया है लेकिन विंडो पर 'एडजस्ट साइज() 'विजेट के आकार के नीचे विंडो को ध्वस्त कर देता है। शायद यह उन स्प्लिटरों के कारण होता है जिनका मैं उपयोग कर रहा हूं। – Nobody

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