Qt

2011-04-15 12 views
18

में प्रोग्रामेटिक रूप से क्षैतिज रेखा कैसे बनाएं I Qt में क्षैतिज रेखा बनाने का तरीका जानने का प्रयास कर रहा हूं। डिजाइनर में बनाना आसान है लेकिन मैं एक प्रोग्रामेटिक रूप से बनाना चाहता हूं। मैंने कुछ googleing किया है और एक ui फ़ाइल में xml को देखा है लेकिन कुछ भी समझने में सक्षम नहीं है।Qt

<widget class="Line" name="line"> 
    <property name="geometry"> 
    <rect> 
    <x>150</x> 
    <y>110</y> 
    <width>118</width> 
    <height>3</height> 
    </rect> 
    </property> 
    <property name="orientation"> 
    <enum>Qt::Horizontal</enum> 
    </property> 
    </widget> 

उत्तर

31

एक क्षैतिज या खड़ी रेखा बस कुछ गुण सेट के साथ एक QFrame है:

यह वही है ui फ़ाइल से एक्सएमएल लग रहा है की तरह है। सी ++, कोड है कि एक लाइन बनाने के उत्पन्न होता है में इस तरह दिखता है:

line = new QFrame(w); 
line->setObjectName(QString::fromUtf8("line")); 
line->setGeometry(QRect(320, 150, 118, 3)); 
line->setFrameShape(QFrame::HLine); 
line->setFrameShadow(QFrame::Sunken); 
+1

'setGeometry' हैं और' वास्तव में setFrameShadow' आवश्यक? मैं अभी भी क्यूटी के लिए काफी नया हूं, लेकिन मैं डिफ़ॉल्ट क्यूटी यूआई शैली पर निर्भर होने के लिए डिफ़ॉल्ट रूप से फ्रेम छाया की शैली की अपेक्षा करता हूं। मैं यहां क्रॉस-प्लेटफॉर्म लिखने की कोशिश कर रहा हूं। –

+1

@MichaelScheper कोई भी आवश्यक कॉल 'setFrameShape() 'और' setFrameShadow()' है। –

13

मेरे PyQt में समाधान:

(...) 
mainLayout.addWidget(self.HLine()) 
(...) 
def HLine(self): 
    toto = QFrame() 
    toto.setFrameShape(QFrame.HLine) 
    toto.setFrameShadow(QFrame.Sunken) 
    return toto 

def VLine(self): 
    toto = QFrame() 
    toto.setFrameShape(QFrame.VLine) 
    toto.setFrameShadow(QFrame.Sunken) 
    return toto 
+0

बढ़िया! मुझे बहुत मदद की। हालांकि यह 'mainLayout.addWidget (self.HLine()) होना चाहिए –

5

यहाँ PySide का उपयोग कर एक और समाधान है:

from PySide.QtGui import QFrame 


class QHLine(QFrame): 
    def __init__(self): 
     super(QHLine, self).__init__() 
     self.setFrameShape(QFrame.HLine) 
     self.setFrameShadow(QFrame.Sunken) 


class QVLine(QFrame): 
    def __init__(self): 
     super(QVLine, self).__init__() 
     self.setFrameShape(QFrame.VLine) 
     self.setFrameShadow(QFrame.Sunken) 

कौन कर सकते हैं फिर के रूप में उपयोग किया जाना चाहिए (उदाहरण के लिए):

from PySide.QtGui import QApplication, QWidget, QGridLayout, QLabel, QComboBox 


if __name__ == "__main__": 
    app = QApplication([]) 
    widget = QWidget() 
    layout = QGridLayout() 

    layout.addWidget(QLabel("Test 1"), 0, 0, 1, 1) 
    layout.addWidget(QComboBox(), 0, 1, 1, 1) 
    layout.addWidget(QHLine(), 1, 0, 1, 2) 
    layout.addWidget(QLabel("Test 2"), 2, 0, 1, 1) 
    layout.addWidget(QComboBox(), 2, 1, 1, 1) 

    widget.setLayout(layout) 
    widget.show() 
    app.exec_() 

निम्नलिखित में से कौन में परिणाम:

Example of QHLine on Windows 10

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