2009-08-25 13 views
10

मैं एक मानक दो कॉलम फॉर्म बनाने की कोशिश कर रहा हूं, जहां पहला कॉलम एक टेक्स्ट लेबल (QLabel) है और दूसरा कॉलम एक इंटरैक्टिव विजेट है, आमतौर पर एक टेक्स्ट फ़ील्ड (QLineEdit)। हमने फॉर्म पंक्तियों को रखने का निर्णय लिया है जो QGroupBox के अंदर एक सामान्य विषय साझा करते हैं, और इस प्रकार मुख्य लेआउट की तुलना में एक अलग लेआउट में। इस प्रकार, प्रत्येक QGroupBox के अंदर फॉर्म तत्व क्षैतिज रूप से QGroupBox es के बाहर फ़ॉर्म तत्वों के साथ संरेखित नहीं होते हैं।क्यूटी में, मैं विभिन्न समूह बक्से में फॉर्म तत्वों को कैसे संरेखित करूं?

मैं समूह बॉक्स और लेआउट का उपयोग कैसे कर सकता हूं जैसे कि QLabel एस और QLineEdit दोनों अंदर और बाहर समूह बक्से (क्षैतिज) एक दूसरे के साथ गठबंधन हैं?

धन्यवाद!

उत्तर

4

करने के लिए अपने सभी स्तंभों के लिए मजबूर करने। यह अलग-अलग समूह बक्से के अंदर सभी लेबल प्राप्त करेगा।

अब, उन समूहों के साथ गठबंधन समूह के बाहर लेबल प्राप्त करने के लिए: सबसे पहले, मुझे लगता है कि प्रत्येक लेबल/लाइनेडिट जोड़ी अपने क्षैतिज लेआउट में है, या आपके पास ग्रिड के अंदर कई पंक्तियां हैं। किसी भी मामले में, आप क्या कर सकते हैं लेबल के न्यूनतम चौड़ाई को लेबलबॉक्स में लेबल के समान मान पर सेट करना है। अंत में, लेआउट LeftMargin, layoutRightMargin, और लेआउटस्पेसिंग गुण क्षैतिज (या ग्रिड) लेआउट पर समायोजित करें जब तक लेबल/लाइनेडिट जोड़ी के दाएं और बाएं किनारों को समूह बॉक्स के अंदर संरेखित न करें।

यदि आप अपने यूआई बनाने के लिए क्यूटी निर्माता, या क्यूटी डिजाइनर में पहले से ही फॉर्म एडिटर का उपयोग नहीं कर रहे हैं, तो मुझे यह काम काफी आसान बनाने के लिए मिला।

मुझे स्वीकार करना है, यह थोड़ा सा झुकाव महसूस करता है, लेकिन मेरे द्वारा बनाए गए सरल परीक्षण मामले में, यह ठीक काम करने लग रहा था। दूसरी ओर, यदि उपयोगकर्ता फ़ॉन्ट आकार बदलता है तो ऐसा तोड़ने की संभावना है। शायद एक बेहतर तरीका है?

उम्मीद है कि इससे मदद मिलती है।

+0

मैं इसे एक शॉट दूंगा - मैं आपको बता दूंगा कि यह कैसा चल रहा है। – swongu

+0

मैंने दूसरे घटक की कोशिश नहीं की, लेकिन मैं आपको बता सकता हूं कि शीर्ष-स्तरीय समूह बक्से के अंदर लेबल की न्यूनतम चौड़ाई को मैजिकल रूप से काम करना है। छद्म कोड के लिए अपना खुद का जवाब देखें। – swongu

1

मुझे नहीं लगता कि यह नेस्टेड क्षैतिज और लंबवत लेआउट के सेट के साथ काम करेगा। क्या आपने QGridLayout माना है?

+0

मैं अलग समूह बक्से के अंदर प्रपत्र तत्वों की जरूरत है, तो दुर्भाग्य से मैं अलग/नेस्टेड लेआउट की आवश्यकता होगी। मैं वास्तव में पहले से ही 'QGridLayout' का उपयोग कर रहा हूं! – swongu

0

setGeometry उपयोग करें() तुम कुछ है कि अभी विस्तृत व्यापक लेबल प्रदर्शित करने के लिए पर्याप्त करने के लिए groupboxes अंदर लेबल के सभी पर minimumWidth संपत्ति सेट कर सकते हैं एक ही चौड़ाई

+0

क्या यह ब्रेक लेआउट नीतियां नहीं होगी? – swongu

1

kenrogers समाधान प्रदान की है, और यहाँ कुछ अधूरा कोड है कि मैं यह काम कर पाने के लिए प्रयोग किया जाता है:

int width = 0 ; 
QDialog* dialog ; 
QList<QGridLayout*> layouts = dialog->findChildren<QGridLayout*>() ; 
QList<QLabel*> labels ; 
foreach (QGridLayout* layout, layouts) 
{ 
    // Loop through each layout and get the label on column 0. 
    QLabel* foundLabel ; 
    labels << foundLabel ; 

    // Get the width. 
    width = qMax(foundLabel->width(), width) ; 
} 

foreach (QLabel* label, labels) 
{ 
    label->setMinimumWidth(width) ; 
} 
संबंधित मुद्दे