Как программно сделать горизонтальную линию в Qt
Я пытаюсь понять, как сделать горизонтальную линию в Qt. Это легко создать в Designer, но я хочу создать его программно. Я сделал некоторые googleing и посмотрел на xml в файле ui, но не смог ничего понять.
Вот что выглядит xml из файла ui:
<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>
Ответы
Ответ 1
Горизонтальная или вертикальная линия - это всего лишь QFrame
с некоторыми наборами свойств. В С++ код, созданный для создания строки, выглядит следующим образом:
line = new QFrame(w);
line->setObjectName(QString::fromUtf8("line"));
line->setGeometry(QRect(320, 150, 118, 3));
line->setFrameShape(QFrame::HLine);
line->setFrameShadow(QFrame::Sunken);
Ответ 2
Мое решение в 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
Ответ 3
Здесь другое решение, использующее 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_()
Это приводит к следующему:
![Пример QHLine в Windows 10]()