gpt4 book ai didi

qt - 如何在不缩放笔宽的情况下在 QGraphicsScene 上绘图?

转载 作者:行者123 更新时间:2023-12-01 06:31:49 25 4
gpt4 key购买 nike

我正在尝试在 QGraphicScene 数据上绘图,该数据可以根据情况按数量级变化。由于我使用的笔是装饰性的,我希望 View 与数据的大小无关。但我得到的是:

噪声乘以 50000 的正弦波:

scale 50000

噪声乘以 50 的正弦波:

scale 50

但是,如果我放大到这些图中的任何一个(两者都放大相同的数量),当两个图像看起来相同时,我最终会达到一个水平:

scale 50000 zoom
enter image description here

这里发生了什么?为什么笔的宽度会因为数据值更大而改变。为什么放大后缩放会消失?

重现这一点的代码如下。左键单击图放大,右键单击缩小。

import sys

from PyQt4 import QtGui as QG
from PyQt4 import QtCore as QC

import numpy as n

class ZoomView(QG.QGraphicsView):
"""Zoomable QGraphicsView"""
def mouseReleaseEvent(self,event):
if event.button() == QC.Qt.LeftButton:
self.scale(1.5,1)
elif event.button() == QC.Qt.RightButton:
self.scale(1/1.5,1)

class MainUI(QG.QDialog):
def __init__(self, parent=None):
super(MainUI, self).__init__(parent)

layout = QG.QVBoxLayout()
self.setLayout(layout)
button_layout = QG.QHBoxLayout()
pb3 = QG.QPushButton('add plot')
button_layout.addWidget(pb3)
layout.addLayout(button_layout)
pb3.clicked.connect(self.scene_maker_singleshot)
scene = QG.QGraphicsScene()
view = ZoomView(self)
view.setTransformationAnchor(QG.QGraphicsView.AnchorUnderMouse)
view.setRenderHint(QG.QPainter.Antialiasing)
layout.addWidget(view)
view.setScene(scene)

self.view = view
self.scene = scene

def scene_maker_singleshot(self):
"""Draw scene and fit in view"""
t1 = 50
t2 = 100
QC.QTimer.singleShot(t1, self.make_scene)
QC.QTimer.singleShot(t2, lambda: self.view.fitInView(self.view.sceneRect()))


def make_scene(self):
scale = 50
#scale = 50000
noise_amp = 0.2*scale
points = 1000

xdata = n.arange(points)
#generate sine data and random noise
ydata = n.sin(xdata/(points/10.))*scale +\
n.random.randint(noise_amp, size=points)
pen = QG.QPen(QG.QColor("red"))

for i in xrange(1, xdata.size):
self.scene.addLine(xdata[i-1], ydata[i-1], xdata[i], ydata[i], pen)


if __name__=="__main__":
app = QG.QApplication(sys.argv)
gui = MainUI()
gui.setFixedSize(500,500)
gui.show()
app.exec_()

最佳答案

就像 Mad Physicist 告诉您的那样,将笔设置为化妆品或线宽为 0(行为相同),您将拥有一支非缩​​放笔。

>> pen.setCosmetic(True);

关于qt - 如何在不缩放笔宽的情况下在 QGraphicsScene 上绘图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19496127/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com