gpt4 book ai didi

python - 如何隐藏 QGraphicSscene 中的特定项目?

转载 作者:太空宇宙 更新时间:2023-11-04 04:15:13 24 4
gpt4 key购买 nike

我的问题是,我想根据我的 Ui 中的缩放级别“隐藏/显示”、“更改颜色”一些项目,但是我完全迷失在所有 C+ 论坛中,因为我的 C+ 知识接近于 0。这里有一些代码:

from PySide2 import QtGui, QtCore, QtWidgets
from PySide2.QtCore import Signal

class testUi(QtWidgets.QDialog):
def __init__(self, parent=None):
super(testUi, self).__init__(parent)
self.window = 'vl_test'
self.title = 'Test Remastered'
self.size = (1000, 650)

self.create( )

def create(self):
self.setWindowTitle(self.title)
self.resize(QtCore.QSize(*self.size))
self.testik = test(self)

self.mainLayout = QtWidgets.QVBoxLayout( )
self.mainLayout.addWidget(self.testik)
self.setLayout(self.mainLayout)


class test(QtWidgets.QGraphicsView):
zoom_signal = Signal(bool)
def __init__(self, parent=None):
super(test, self).__init__(parent)
self._scene = QtWidgets.QGraphicsScene()
self.__zoom = 0
self.setScene(self._scene)
self.drawSomething( )
self.setTransformationAnchor(QtWidgets.QGraphicsView.AnchorUnderMouse)
self.setResizeAnchor(QtWidgets.QGraphicsView.AnchorUnderMouse)
self.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
self.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
self.setBackgroundBrush(QtGui.QBrush(QtGui.QColor(30, 30, 30)))
self.setFrameShape(QtWidgets.QFrame.NoFrame)
self.setSizePolicy(QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding))

def drawSomething(self):
path = QtGui.QPainterPath( )
path.moveTo(0, 0)
path.addRect(20, 20, 60, 60)
item = self._scene.addPath(path)
item.setPen(QtGui.QPen(QtGui.QColor(79, 106, 25), 1, QtCore.Qt.SolidLine, QtCore.Qt.FlatCap, QtCore.Qt.MiterJoin))
item.setBrush(QtGui.QColor(122, 163, 39))


def wheelEvent(self, event):
if event.angleDelta().y() > 0:
factor = 1.25
self.__zoom += 1
else:
factor = 0.8
if self.__zoom > 0:
self.scale(factor, factor)
if self.__zoom > 10:
self.zoom_signal.emit(True)
elif self.__zoom < 10:
self.zoom_signal.emit(False)
else:
self.__zoom = 0



if __name__ == '__main__':
import sys
app = QtWidgets.QApplication(sys.argv)
window = testUi()
window.setGeometry(500, 300, 800, 600)
window.show()
sys.exit(app.exec_())

所以我有一些“wheelEvent”可以帮助我放大/缩小 QGraphicScene,其中我有“Rect”。如果缩放太大,我现在想隐藏“Rect”。感谢您的宝贵时间。

附言我知道,这里有几个人总是帮助我一步一步地理解 Qt 并像婴儿一样用勺子喂我,我真的很感激!我在这件事上有点傻。

最佳答案

使用您的代码,变量 self.__zoom 永远不会大于 10,让我们分析一下我指出的内容:最初该值为 0,假设它在达到值时逐一上升九 现在表达式 else: self .__ zoom = 0 将导致值重置为 0,因此最佳情况下的值将从 0 变为 9 并将被重置。所以其他的就没有必要了。如果我们删除,变量不能减少,所以当delta为负时应该减少该值。

要根据 zoom_signal 信号使项目可见,它必须连接到 setVisible() 方法。

考虑到上面的解决方案是:

def drawSomething(self):
path = QtGui.QPainterPath( )
path.moveTo(0, 0)
path.addRect(20, 20, 60, 60)
item = self._scene.addPath(path)
item.setPen(QtGui.QPen(QtGui.QColor(79, 106, 25), 1, QtCore.Qt.SolidLine, QtCore.Qt.FlatCap, QtCore.Qt.MiterJoin))
item.setBrush(QtGui.QColor(122, 163, 39))
self.zoom_signal.connect(item.setVisible)


def wheelEvent(self, event):
if event.angleDelta().y() > 0:
factor = 1.25
self.__zoom += 1
else:
factor = 0.8
self.__zoom -= 1
self.scale(factor, factor)
self.zoom_signal.emit(self.__zoom < 10)

关于python - 如何隐藏 QGraphicSscene 中的特定项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55583987/

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