如何在QT Designer中更改QT线条小部件的颜色

5

Kaveish提供了一个很好的代码片段来处理这个问题How does designer create a Line widget?我该如何将这些线条的颜色从它们的默认黑色更改为蓝色。

感谢任何帮助

2个回答

3

根据您的需求,有几种不同的方法可以实现这一点。我将在此处提供Python示例,但转换为C++也很简单。

设置QPalette

如果您想保持当前样式的外观,可以尝试设置调色板颜色。这在Linux上使用默认的Breeze和Oxygen样式非常有效:

最初的回答:

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;
    }
''')

QPaintEvent

还有一种自定义绘图的解决方案。这是一种简单的实现,可以获得类似于氧气“平滑”线条的效果。

最初的回答:

还有一个自定义绘图的解决方案。这是一种简单的实现,可以获得类似于氧气“平滑”线条的效果。

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)

2
更新:根据@VaderB的评论,color属性有效:
QFrame *verticalLine = new QFrame(this);
verticalLine->setFrameShape(QFrame::VLine);
verticalLine->setStyleSheet("color: rgb(221, 221, 221)");

在编程中,将StyleSheet应用在项目中非常有效。例如,在设计界面:
#line, #line_2 {
    background-color: rgb(0, 0, 255);
}

这里,line 和 line_2 是行 (: 并且在小部件类中:

line->setStyleSheet(QString("background-color: #0000FF;"));

它不起作用。这将更改_background color_,而不是线条的_color_。 - Federico Rubbi
代码可行,我已经测试过了。它会改变线条的背景颜色,这个颜色就是线条本身的颜色 :) - Bobur
我测试了一下,它改变了包含该行的区域的颜色而不是线条的颜色。 - Federico Rubbi
@FedericoRubbi,看来你是对的。如果你在布局中使用它,它只会给人一种改变了行颜色的印象。你可以以同样的方式使用它。我会更新我的答案。 - Bobur
1
只需使用 color 属性,就像这样: #line{color: white;} - Vader B

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接