任务是绘制item's
第一列中的所有内容,但不仅仅是用一种颜色,而是 40% 的宽度应该用一种颜色填充,另外 60% 用另一种颜色填充,而且还不是很大的条件,边界之间颜色应均匀,无模糊,混色效果。我尝试这样:QTreeWidget
background
item'a
self.treeWidget = QTreeWidget()
self.treeWidget.setColumnCount(3)
self.treeWidget.setHeaderLabels(['1', '2', '3'])
self.treeWidget.addTopLevelItem(QTreeWidgetItem(['item1', 'item2', 'item3']))
grad = QLinearGradient(QPointF(0, 0),QPointF(self.treeWidget.columnWidth(0), 0))
grad.setStops([(0.4, QColor(255, 0, 0)),(0.41, QColor(0, 255, 0)),])
grad.setCoordinateMode(QLinearGradient.CoordinateMode.ObjectBoundingMode)
self.treeWidget.topLevelItem(0).setBackground(0, grad)
事实证明是胡说八道,如何做对呢?也许使用另一种方法会更好?哪个?
渐变将设置渐变:) 这里需要稍微复杂一点。自己画背景,重载
QTreeWidget::drawRow
应该马上指出,您当然可以使用通常的背景来绘制背景
QTrwwWidgetItem::setBackground(column, brush)
,但是这样的背景不会以任何方式改变单元格的大小它位于计算梯度宽度的坐标空间中,只需将其转换为逻辑模式:
现在
QLinearGradient.CoordinateMode.LogicalMode
,从列宽获取坐标,以实际大小,而不是 (x1: 0, x2: 0 y1: 1, y2: 1) 是的,为了使渐变边界清晰均匀,没有模糊 -您需要使用颜色过渡之间的最小边界,我将它们放在变量中stop1
并且stop2