Kaveish提供了一段很好的代码来处理这个问题 How does designer create a Line widget? 如何将这些线条的颜色从黑色默认颜色更改为蓝色。
感谢您的帮助
答案 0 :(得分:0)
使用StyleSheet对我有用。例如,在Designer中:
#line, #line_2 {
background-color: rgb(0, 0, 255);
}
这里,line and line_2
是行(:和小部件类:
line->setStyleSheet(QString("background-color: #0000FF;"));
答案 1 :(得分:0)
根据您的需要,有几种不同的方法。我将用Python发布示例,但是移植到C ++很简单。
如果要保持当前样式的外观,可以尝试设置调色板颜色。在具有默认Breeze和Oxygen样式的Linux上,这可以正常工作:
palette = self.line.palette()
palette.setColor(palette.Window, QtGui.QColor(QtCore.Qt.lightGreen)
self.line.setPalette(palette)
不幸的是,并非所有主题/样式都以相同的方式实现,并且Windows和Fusion样式都需要为palette.Dark
角色设置颜色,这使得整个解决方案在很大程度上取决于平台和样式。用户可以安装自己的样式。
样式表解决方案需要实现QFrame小部件子类的border
属性,但是看起来并不总是很好,最好将setFixedHeight
(或垂直线的宽度)设置为最大2个像素
self.line.setStyleSheet('''
MyLineClass {
border: 0.5px solid green;
border-style: inset;
}
''')
然后是自定义绘画解决方案。这是一个简单的实现,获得的效果类似于“平滑”氧气线。
class MyHorizontalLine(QtWidgets.QWidget):
grad = QtGui.QLinearGradient(0, 0, 1, 0)
grad.setCoordinateMode(self.grad.StretchToDeviceMode)
grad.setCoordinateMode(self.grad.ObjectBoundingMode)
grad.setColorAt(0, QtGui.QColor(QtCore.Qt.transparent))
grad.setColorAt(.5, QtGui.QColor(QtCore.Qt.darkGray))
grad.setColorAt(1, QtGui.QColor(QtCore.Qt.transparent))
gradPen = QtGui.QPen(QtGui.QBrush(grad), 1)
def paintEvent(self, event):
qp = QtGui.QPainter(self)
qp.setRenderHints(qp.Antialiasing)
qp.translate(.5, self.rect().center().y() - .5)
qp.setPen(self.gradPen)
qp.drawLine(0, 0, self.width(), 0)
qp.translate(0, 1)
qp.setOpacity(.5)
qp.drawLine(0, 0, self.width(), 0)