Python Qt绑定:如何增加线宽为0的宽度

3

以下是一个简单的例子(在我的电脑上可以使用PySide或PyQt4):

import sys
import random
import numpy
from PySide import QtGui, QtCore

class Window(QtGui.QWidget):

    def __init__(self):
        super(Window, self).__init__()

        self.resize(800, 500)
        self.view = QtGui.QGraphicsView()
        self.scene = QtGui.QGraphicsScene()
        self.view.setScene(self.scene)
        self.setWindowTitle('Example')

        # Layout
        layout = QtGui.QGridLayout()
        layout.addWidget(self.view, 0, 0)
        self.setLayout(layout)

        # Styles
        self.pen = QtGui.QPen(QtCore.Qt.black, 0, QtCore.Qt.SolidLine)
        self.brush = QtGui.QBrush(QtGui.QColor(255, 255, 255, 255))

    def addLine(self, x0, y0, x1, y1):
        line = QtCore.QLineF(x0, -y0, x1, -y1)
        pen = QtGui.QPen(QtGui.QColor(250, 0, 0, 255), 0, QtCore.Qt.SolidLine)
        pen.setStyle(QtCore.Qt.CustomDashLine)
        pen.setDashPattern([1, 4, 5, 4])
        l = self.scene.addLine(line, pen)

    def addRect(self, left, top, width, height):
        rect = QtCore.QRectF(left, -top, width, abs(height))
        r = self.scene.addRect(rect, self.pen, self.brush)

    def fit(self):
        self.view.fitInView(self.scene.sceneRect())

    def resizeEvent(self, event = None):
        self.fit()


if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    window = Window()
    window.show()
    window.addRect(0, 1, 1, 1)
    window.addLine(-1, -1, 2, 2)
    window.addLine(0, 1, 1, 0)
    window.fit()
    sys.exit(app.exec_())

我可以绘制两条宽度恒定的红线,这意味着无论正方形和直线的大小(坐标)如何,以及窗口是否重新调整大小,它们都不会改变。

enter image description here enter image description here

这是因为我正在使用宽度为0QtGui.Qpen。但是,如果我使用另一个宽度> 0,那么在窗口重新调整大小时观察到的线条宽度将会改变(或者如果正方形和线条有其他尺寸,则也会改变):

enter image description here enter image description here

是否可以在保持窗口调整或正方形/线条尺寸变化时,将线宽更改(增加)以使观察到的线条比设置为0时更粗,同时保持相同的“观察到”的宽度?

编辑

使用o11c建议的setCosmetic(True)具有意外行为(至少我不希望发生这种情况);它会向图像添加边距(增加scene.sceneRect()的大小)。这些边距似乎与isCosmetic() == TrueQPen的宽度成比例:

enter image description here

一道新的问题与此问题相关联。请查看问题26231374以获取更多细节:
1个回答

1
根据Qt C++文档,使用setCosmetic函数QPen上。我假设Python包装器会公开这个函数。

+1,但是,为什么会改变边距?将cosmetic设置为“True”可以使从左下到右上的对角线不从角落开始和结束(http://i.imgur.com/7Vn2Ted.png)。当isCosmetic()== True时,这个额外的边距似乎与QPen的宽度成比例。您能在您的答案中解释一下吗? :-) - Peque
@Peque 抱歉,我不知道,但有时候我很擅长知道该如何搜索。 - o11c

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