- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我需要绘制一个带有缩放和Qwheel事件
的形状。我尝试过painter.scale和painter.translate,但它根本不影响形状的缩放。
这个想法是绘制不同的形状,例如下图上的这个,一个起始值为( 200, 300) 的矩形 看起来很完美,甚至以 canvas 小部件
为中心。但当值较大时( 500, 700 ),如下图第二个所示,会放大并变得不需要。我想按比例绘制它,并能够使用鼠标事件
来滚动(放大和缩小)它。
可视化。
代码:
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
class Foo(QtWidgets.QWidget):
def __init__(self, parent=None):
super(Foo, self).__init__(parent)
self.setGeometry(QtCore.QRect(200, 100, 700, 600))
self.paint = Paint()
self.sizeHint()
self.lay = QtWidgets.QVBoxLayout()
self.lay.addWidget(self.paint)
self.setLayout(self.lay)
class Paint(QtWidgets.QWidget):
def __init__(self, parent=None):
super(Paint, self).__init__(parent)
self.setBackgroundRole(QtGui.QPalette.Base)
self.setAutoFillBackground(True)
self._width = 200
self._height = 300
def paintEvent(self, event):
pen = QtGui.QPen()
brush = QtGui.QBrush( QtCore.Qt.darkCyan, QtCore.Qt.Dense5Pattern)
painter = QtGui.QPainter(self)
painter.setRenderHint(QtGui.QPainter.Antialiasing)
painter.setPen(pen)
painter.setBrush(brush)
r = QtCore.QRect(QtCore.QPoint((self.width() - self._width)/ 2, (self.height() -self._height)/ 2), QtCore.QSize(self._width, self._height))
painter.drawRect(r)
painter.scale(0.4,0.4)
painter.translate(50, 50)
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
w = Foo()
w.show()
sys.exit(app.exec_())
我非常感谢任何帮助。谢谢
最佳答案
比例是相对于左上角给出的,因此如果我们希望它相对于中心进行缩放,则必须首先将其移动到那里,然后在缩放后将其放置在初始位置。对于比例因子的情况,请使用带有 angleDelta()
的 wheelEvent
方法,并乘以适当的因子。
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
class Foo(QtWidgets.QWidget):
def __init__(self, parent=None):
super(Foo, self).__init__(parent)
self.setGeometry(QtCore.QRect(200, 100, 700, 600))
self.paint = Paint()
self.sizeHint()
self.lay = QtWidgets.QVBoxLayout()
self.lay.addWidget(self.paint)
self.setLayout(self.lay)
class Paint(QtWidgets.QWidget):
def __init__(self, parent=None):
super(Paint, self).__init__(parent)
self.setBackgroundRole(QtGui.QPalette.Base)
self.setAutoFillBackground(True)
self.r = QtCore.QRect(QtCore.QPoint(), QtCore.QSize(200, 300))
self._factor = 1.0
def paintEvent(self, event):
self.r.moveCenter(self.rect().center())
pen = QtGui.QPen()
brush = QtGui.QBrush( QtCore.Qt.darkCyan, QtCore.Qt.Dense5Pattern)
painter = QtGui.QPainter(self)
painter.setBrush(brush)
painter.setPen(pen)
painter.setRenderHint(QtGui.QPainter.Antialiasing)
painter.translate(self.rect().center())
painter.scale(self._factor, self._factor)
painter.translate(-self.rect().center())
painter.drawRect(self.r)
def wheelEvent(self, event):
self._factor *= 1.01**(event.angleDelta().y()/15.0)
self.update()
super(Paint, self).wheelEvent(event)
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
w = Foo()
w.show()
sys.exit(app.exec_())
关于python - QPaint 使用 mouseevent 进行平移缩放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53048682/
我正在尝试在Qt中创建一个支持缩放的简单图像查看器。 要显示图像文件,我将其加载到QImage中并创建QPixmap。 class NN: public QWidget{ Q_OBJECT
我有最基本的 Qt 程序——一个主窗口。我希望能够使用 QPainter 绘制一些线条 - 只不过是线条而已(我正在尝试绘制直方图)。无论如何,我已经阅读了代码示例,但由于某种原因我的代码无法正常工作
我正在尝试创建这样的东西 这是我的做法 QPixmap target(60,80); QBrush BackGroundBrush; BackGroundBrush.setCol
我正在尝试学习如何将 QPainter 与 QGLFramebufferObject 一起使用。当我尝试在 QGLWidget 中显示纹理时,它是不可见的。 (完整代码如下) 最终目标是使用 QPai
我需要绘制一个带有缩放和Qwheel事件的形状。我尝试过painter.scale和painter.translate,但它根本不影响形状的缩放。 这个想法是绘制不同的形状,例如下图上的这个,一个起始
我创建了一个类名 QSector 来绘制如下扇区: http://www.philadelphia-reflections.com/images/GDP_Composition_By_Sector_G
我是一名优秀的程序员,十分优秀!