2012-12-05 11 views
17

मुझे उदाहरण है जो QHBoxLayout का उपयोग करता है और (आदर्श रूप से स्वचालित रूप से, लेकिन कुछ फ़ंक्शन को कॉल करने पर भी ठीक है) इसकी सामग्री को फिट करने के लिए क्षैतिज रूप से आकार बदलता है। क्षैतिज आकार बदलना पर्याप्त है क्योंकि कंटेनर समेत सभी विजेट्स में समान ऊंचाई होगी।क्यूटी विजेट सभी सामग्री फिट करने के लिए न्यूनतम आकार के साथ

उपयोग केस निम्न है: विजेट, चलिए इसे कंटेनर कहते हैं, फ़्लोटिंग है, यानी किसी भी लेआउट का हिस्सा नहीं है। एक उपयोगकर्ता कंटेनर के लेआउट में एक निश्चित आकार (फ़ंक्शन को कॉल करके) के साथ और विजेट जोड़ने में सक्षम होना चाहिए, जिस पर कंटेनर अपनी नई सामग्री को फिट करने के लिए बढ़ता है। उपयोगकर्ता को पहले जोड़े गए विजेट को हटाने में भी सक्षम होना चाहिए, जिस पर कंटेनर फिर से घटता है। कंटेनर तब तक नहीं बनाया जाएगा जब तक कि पहला विजेट डाला न जाए और हटाए जाने पर हटा दिया जाए, यानी इसमें हमेशा कम से कम एक विजेट होगा।

एक उदाहरण: पहला विजेट जोड़ने के बाद, कंटेनर इस तरह दिखता है, | अपने बाएँ/सही सीमाओं होने के साथ:

|<1st widget>| 

एक दूसरे से जोड़ने के बाद, यह इस तरह दिखता है:

|<1st widget> <2nd, longer widget>| 

पहले विजेट हटाने के बाद, यह इस तरह दिखता है:

|<2nd, longer widget>| 

मुझे संदेह है कि यह एक प्रकार का सरल होना चाहिए, लेकिन मैं कहीं भी कंटेनर के sizeHint, sizePolicy, adjustSize(), और इसके लेआउट के sizeContraint के साथ-साथ आकार को स्पष्ट रूप से सेट करने और अद्यतनों को मजबूर करने के साथ कई प्रयासों में खो गया है और अनिवार्य रूप से कहीं भी नहीं मिला है (यानी। कंटेनर बिल्कुल आकार नहीं बदल रहा है, कंटेनर केवल बढ़ रहा है लेकिन सिकुड़ना नहीं है, आदि)। मुझे संदेह है कि मुझे किसी तरह का स्पष्ट याद आना चाहिए ..?

उत्तर

8

आपका अनुमान सही है। किसी को लेआउट में विजेट्स के लिए आकार नीतियां सेट करनी होंगी। वांछित प्रभाव प्राप्त करने के लिए पहले विजेट में QSizePolicy::Minimum होना चाहिए और दूसरा व्यक्ति QSizePolicy::Expanding होना चाहिए। यहां एक नमूना अनुप्रयोग है:

#include <QtGui> 

int main(int argc, char *argv[]) 
{ 
    QApplication a(argc, argv); 

    QPushButton *button1 = new QPushButton("Hello"); 
    button1->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Preferred); 
    QObject::connect(button1, SIGNAL(clicked(bool)), button1, SLOT(hide())); 
    QPushButton *button2 = new QPushButton("World"); 
    button2->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); 
    QObject::connect(button2, SIGNAL(clicked(bool)), button2, SLOT(hide())); 

    QHBoxLayout *layout = new QHBoxLayout(); 
    layout->addWidget(button1); 
    layout->addWidget(button2); 

    QWidget main; 
    main.setLayout(layout); 
    main.show(); 

    return a.exec(); 
} 
संबंधित मुद्दे

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