2009-11-04 3 views
5

मेरे पास QDialog है जिसके साथ मैं काम कर रहा हूं। यह कुछ हद तक QMessageBox की तरह बनाया गया है। मैंने देखा कि QMessageBox (और उसके लेबल का आकार) का आकार प्रदर्शित संदेश के आकार पर निर्भर करता है।मैं अपने बच्चों में से किसी एक की टेक्स्ट लम्बाई के आधार पर QDialog के आकार को स्वतः समायोजित कैसे करूं?

मैं अपने QDialog का आकार स्वचालित रूप से QMessageBox जैसे समायोजित कैसे करूं? वर्तमान में मेरे QDialog में एक बटन बॉक्स और एक लेबल है, और QDialog लेआउट वर्टिकल है।

(मैं जानता हूँ कि मैं सिर्फ सीधे संदेश बॉक्स इस्तेमाल कर सकते हैं लेकिन अंत में मैं और अधिक जटिल संवाद होगा।)

उत्तर

13

स्वत: समाधान:

QSizePolicy::Expanding पर लेआउट का उपयोग करें और आकार नीतियों को सेट करें। QtDesigner में, एक बार आपके सभी बच्चे आपके QDialog पर रखे जाते हैं, फिर पर क्लिक करें आकार बटन अगले लेआउट वाले समायोजित करें। आपका QDialog स्वचालित रूप से रनटाइम पर बदल दिया जाएगा।

मैनुअल समाधान:

QWidget वर्ग एक विधि adjustSize कि आकार बदलने QWidget अपनी सामग्री फिट करने के लिए है। जब सभी बच्चे सेट होते हैं तो बस इसे कॉल करें।

+1

मैन्युअल समाधान मेरे मामले में काम नहीं करता है: मेरे पास QQBoxLayout के साथ QDBoxLayout के साथ एक QDialog है और एक QHBoxLayout के साथ 2 बटन हैं, मैंने संवाद पर एडजस्ट साइज को विस्तारित करने और कॉल करने के लिए नीतियां सेट की हैं, बिल्कुल कुछ नहीं (दृश्यमान) – Lars

+0

एडजस्टाइज़() को कॉल करने से पहले QApplication :: processEvents() को कॉल करना महत्वपूर्ण है: http://daniel-albuschat.blogspot.de/2009/08/shrinking-qt-widgets-to-minimum-needed.html – Cerno

1

सेट अपने संवाद का विस्तार किया जाना है, और बहुत छोटे। फिर, संवाद दिखाने से पहले अपना संदेश सेट करना सुनिश्चित करें। दिखाए जाने पर, यह उस वस्तु के आकार के आधार पर, उचित आकार खोजने का प्रयास करेगा। (यह रिकर्सिवली होता है, यदि ऐसा है तो संवाद लेबल जिसमें आप अपने संदेश दिखाने के लिए, लेआउट का उपयोग करने के लिए सेट कर दिया जाता लेबल और संवाद के बीच सब कुछ बनाने के प्रत्यक्ष जनक नहीं है।)

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

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