2013-01-18 20 views
5

क्या QSplitter होना संभव है जिसमें एक निश्चित आकार का एक विजेट और दूसरा एक चर आकार के साथ हो?QSplitter एक निश्चित आकार विजेट और एक परिवर्तनीय आकार विजेट के साथ?

इस कोड को चीजों को सही करता है, पर जब खिड़की प्रारंभिक विजेट आकार के अनुपात में विभाजक परिवर्तन आकार दिया जाता है:

vSplitter = new QSplitter(Qt::Vertical, this); 
vSplitter->addWidget(widget1); 
vSplitter->addWidget(widget2); 
QList<int> heights; 
heights.push_back(550); 
heights.push_back(1000); 
vSplitter->setSizes(heights); 

setCentralWidget(vSplitter); 

धन्यवाद।

उत्तर

12

इस एक का प्रयास करें:

QSplitter::setStretchFactor (int index, int stretch)

बस हिस्सा आप 0 के लिए निर्धारित आकार रहते हैं और 1 के लिए यह अन्य विजेट पर सेट करना चाहते हैं के खिंचाव कारक निर्धारित किया है।

पूरे विंडो का आकार बदलने पर, खिंचाव कारक 0 वाला विजेट आकार बदल नहीं जाएगा।

0

मैं कुछ ऐसा करने की कोशिश कर रहा हूं। मेरे पास एक निश्चित विजेट (शीर्ष) है, और एक गैर-निश्चित विजेट (नीचे) है। मैं चाहता हूं कि उपयोगकर्ता सामान्य रूप से स्प्लिटर हैंडल का उपयोग करने में सक्षम हो, लेकिन मैं नहीं चाहता कि विंडो निश्चित विजेट में स्थान जोड़ने के लिए आकार बदल दे। दोनों विगेट्स पर setSizePolicy का उपयोग करने के लिए मेरे लिए काम नहीं किया, और न तो एक या दोनों विजेटों पर setStretchFactor का उपयोग किया।

मैंने क्यूएसप्लिटर को उपclassing समाप्त कर दिया ताकि मैं एक resizeEvent लागू कर सकूं जो स्प्लिटर आकार बदलने के बाद स्प्लिटर को स्थानांतरित करेगा। यह कोड मानता है: केवल दो विजेट हैं। शीर्ष [0] आकार बदलने योग्य है, और नीचे [1] नहीं होना चाहिए।

MySplitter::resizeEvent(QResizeEvent *event) { 
    /* The first resizeEvent is -1 for height and width, because it was 
     invisible before. */ 
    if (event->oldSize().height() != -1) { 
     int diff; 
     QList<int> previousSizes = sizes(); 
     QSplitter::resizeEvent(event); 
     QList<int> newSizes = sizes(); 
     /* The bottom widget is the fixed one, so find out if that is to 
      grow or shrink. */ 
     diff = newSizes[1] - previousSizes[1]; 
     if (diff > 0) { 
      /* Keep the bottom from growing by giving the size to the top. */ 
      newSizes[0] += diff; 
      newSizes[1] -= diff; 
     } 
     else { 
      /* Steal size from the top to keep it from shrinking. */ 
      newSizes[0] -= diff; 
      newSizes[1] += diff; 
     } 
     setSizes(newSizes); 
    } 
    else 
     QSplitter::resizeEvent(event); 
} 
:

यहाँ resizeEvent कि मैंने लिखा है