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

时间:2017-04-19 19:45:32

标签: qt qt-designer

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

感谢您的帮助

2 个答案:

答案 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 ++很简单。

设置QPalette

如果要保持当前样式的外观,可以尝试设置调色板颜色。在具有默认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;
    }
''')

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)