2013-02-20 43 views
11

असल में मुझे इसमें कुछ विजेट्स के साथ QGridLayout मिला है। महत्वपूर्ण 2 लेबल हैं, जिन्हें मैं स्क्रीन पर छवियों को चित्रित करने के लिए उपयोग करता हूं। खैर, यदि उपयोगकर्ता चाहता है, तो वह आने वाली छवियों के संकल्प को बदल सकता है, इस प्रकार, लेबल को आकार बदलने के लिए मजबूर कर सकता है।क्यूटी लेआउट, विजेट आकार परिवर्तन के बाद न्यूनतम करने के लिए आकार बदलें

मान लें कि लेबल का प्रारंभिक आकार 320x240 है। उपयोगकर्ता VideoMode को 640x480 में बदलता है, लेबल और संपूर्ण जीयूआई पूरी तरह से बदलता है। लेकिन जब उपयोगकर्ता 320x240 पर वापस स्विच करता है, तो लेबल कम हो जाता है, लेकिन लेआउट/विंडो नहीं करता है।

मैंने sizePolicies और sizeHints, और resize(0,0) के साथ खेला है, लेकिन कुछ भी चाल नहीं है। क्या कोई मेरी मदद कर सकता है?

Here, everything is okay still, 640 x 480 resizes perfectly but here, the layout is too big.

उत्तर

21

आप पकड़े लेआउट के आकार बाधा निर्धारित करने की आवश्यकता समाप्त हो गया सब अपने "SetFixedSize" के लिए विजेट। यद्यपि यह नाम काम नहीं करेगा जैसे यह काम करेगा, यह सुनिश्चित करता है कि आपका लेआउट केवल उस स्थान का उपयोग करेगा जिसकी आवश्यकता है। आपको अपने दूसरे स्क्रीनशॉट में जैसी समस्या नहीं होगी।

उदाहरण:

mainLayout.setSizeConstraint(QLayout::SetFixedSize); 
+2

धन्यवाद! इसने मुझे इस भयानक नामकरण के कारण खोज और डिबगिंग के कुछ और घंटों बचाए। SetFixedSize का अर्थ है "न्यूनतम आकार में स्वचालित आकार" जो अर्थात् निश्चित आकार नहीं है क्योंकि न्यूनतम आकार विजेट की सामग्री के संभावित (संभावित गतिशील) आकारों पर निर्भर करता है? क्या इसके लिए कोई स्पष्टीकरण है? – hna

+0

नाम बहुत समझ में नहीं आता है, और यह थोड़ी देर के बाद से मैंने क्यूटी के साथ काम किया, इसलिए मुझे याद नहीं आया कि मुझे यह कैसे मिला। लेकिन इस समस्या ने मुझे थोड़ी देर के लिए खराब कर दिया। खुशी है कि यह आपको – user929404

+0

में मदद करता है यह QScrollArea विजेट को छोड़कर सबकुछ के लिए काम करता प्रतीत होता है। क्या आप इसके लिए एक समाधान जानते हैं? – Assimilater

1

आप लेआउट में कोई भी परिवर्तन लागू करने से पहले अपने विजेट माता पिता विंडो के मूल आकार की दुकान और जब उपयोगकर्ता इसे बहाल करने की आवश्यकता:

यहाँ कुछ स्क्रीनशॉट समस्या स्पष्ट करने के लिए मूल पर वापस स्विच।

सूचना है कि आप विजेट माता पिता खिड़की आकार और नहीं विजेट माता पिता आकार के साथ काम करने की जरूरत है।

अपने विजेट में

लेआउट परिवर्तन लागू करने से पहले:

minimumWindowSize = this->window().size(); 

जब आप कॉम्पैक्ट आकार के लिए विजेट का पुनर्गठन

this->window().resize(minimumWindowSize); 
+0

धन्यवाद, मैं कुछ मिनटों में कोशिश करूंगा। तथ्य यह है कि संकल्प के कई अलग-अलग संयोजन हैं, 320x240 से 1280x1024 तक। इसमें 10 आकार की कॉन्फ़िगरेशन लगेंगे। क्या यह कोई तरीका नहीं है क्यूटी स्वचालित रूप से करता है? – Hafnernuss

+0

मैंने इसका परीक्षण नहीं किया, लेकिन आप केवल न्यूनतम आकार (या यहां तक ​​कि एक शून्य आकार प्रदान करने) को संग्रहीत करके भी कोशिश कर सकते हैं। यदि मैं सही क्यूटी हूं तो सभी निहित विजेट प्रदर्शित करने के लिए स्वचालित रूप से विंडो आकार को न्यूनतम मान में बढ़ाएं – Pierluigi

1

ताकि वास्तव में मैं म्यू परियोजना में क्या कर रहा है। संकल्प ओएस कोई फर्क नहीं पड़ता। मेरे पास वीडियो, या आपके मामले में छवि को प्रस्तुत करने के लिए केवल एक विजेट है।

void MainWindow::resizeEvent(QResizeEvent* event) 
{ 
    QMainWindow::resizeEvent(event); 
    if ((player != 0) && ((player->isPlaying()) || player->isLoaded() || player>isLoaded())){ 
    renderer->resize(ui->mainVideoWidget->width(),ui->mainVideoWidget->height()); 
    resizeFilter(); 

} 
} 
5

QLayout :: setSizeConstraint (QLayout :: SetFixedSize) जब आप अपने विजेट का आकार हर समय तय रखने पसंद करते हैं इस समस्या को अच्छी तरह से हल करती है - वह यह है कि यदि आप चाहें तो यह हमेशा अपने को ठीक करने की " पैक "आकार (जो अभी भी बाल विगेट्स आकार बदलने के रूप में भिन्न हो सकता है)। "निश्चित" का अर्थ यही है: सही आकार के लिए "निश्चित", जैसा कि बाद वाला भिन्न होता है। (क्यूटी शब्दों में, जो मैं "पैक" आकार कह रहा हूं वह बस विजेट का आकार है।)

लेकिन कुछ बाधाओं में एक बाधा बहुत मजबूत हो सकती है। विशेष रूप से, यदि आप इसे शीर्ष-स्तरीय विंडो पर लागू करते हैं, तो उपयोगकर्ता विंडो का आकार बदलने के लिए स्वतंत्र नहीं होगा। यदि आपको यह पसंद नहीं है, तो आप इसके बजाय "सेट आकार में आकार संकेत" ऑपरेशन कर सकते हैं, इसे हर बार इसकी आवश्यकता होने पर, इसे एक असंतुलित बाधा के रूप में लागू करने के बजाय। ऐसा करने का तरीका QWidget :: adjustSize() को कॉल करना है।

http://doc.qt.io/qt-5/qwidget.html#adjustSize

नोट कंटेनर जिसका बच्चों बदल रहे हैं आकार उच्च-स्तरीय विंडो, तो adjustSize (नहीं है) कंटेनर और उसके माता-पिता पर पुनरावर्ती के नाम से जाना हो सकता है कि अगर। (मेरे मामले में मुझे ऐसा करना था, वैसे भी। मैंने आकार-बाधा योजना की भी कोशिश की, और पाया कि केवल शीर्षतम स्तर पर बाधा लागू करना सभी स्तरों को संकलित करने में सफल रहा था। मेरे पास उपयोगी रूप से टिप्पणी करने के लिए क्यूटी का पर्याप्त ज्ञान नहीं है इन अवलोकनों पर, इसलिए मैं उन्हें केवल साझा करता हूं।)