我正试图弄清楚如何在Qt中制作一条水平线。这很容易在Designer中创建,但我想以编程方式创建一个。我做了一些googleing并查看了ui文件中的xml,但却无法解决任何问题。
这是ui文件中的xml:
<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>
答案 0 :(得分:33)
水平或垂直线只是一个QFrame
,其中设置了一些属性。在C ++中,为创建一行而生成的代码如下所示:
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 :(得分:9)
这是使用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_()
结果如下:
答案 2 :(得分:2)
这是一个使用标准PyQt5的解决方案,我从shoosh的答案中得出了答案:
from PyQt5 import QtWidgets
class QHSeperationLine(QtWidgets.QFrame):
'''
a horizontal seperation line\n
'''
def __init__(self):
super().__init__()
self.setMinimumWidth(1)
self.setFixedHeight(20)
self.setFrameShape(QtWidgets.QFrame.HLine)
self.setFrameShadow(QtWidgets.QFrame.Sunken)
self.setSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Minimum)
return
class QVSeperationLine(QtWidgets.QFrame):
'''
a vertical seperation line\n
'''
def __init__(self):
super().__init__()
self.setFixedWidth(20)
self.setMinimumHeight(1)
self.setFrameShape(QtWidgets.QFrame.VLine)
self.setFrameShadow(QtWidgets.QFrame.Sunken)
self.setSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Preferred)
return
如果要添加它(例如添加到网格):
seperator_vertical = seperation_lines.QVSeperationLine()
seperator_horizontal = seperation_lines.QHSeperationLine()
grid = QtWidgets.QGridLayout()
grid.addWidget(your_widget_left_from_vertical_seperator, 0, 0, 1, 1,)
grid.addWidget(seperator_vertical, 0, 1, 1, 1)
grid.addWidget(your_widget_right_from_vertical_seperator, 0, 2, 1, 1,)
grid.addWidget(seperator_horizontal, 1, 0, 1, 2)
grid.addWidget(your_widget_below_horizontal_spacer, 2, 0, 1, 2)
请确保不要在分隔符上使用对齐方式,否则可能会使您费解,因为分隔符无法正确缩放。
仅显示此处的所有内容,就是如何将其添加到您的窗口中:
import sys
if __name__ == "__main__":
app = QtWidgets.QApplication([])
widget = QtWidgets.QWidget()
widget.setLayout(grid)
widget.show()
sys.exit(app.exec())