我有一个应用程序QGraphicsView,在屏幕中间有一个窗口.我希望能够使用鼠标滚轮滚动放大和缩小.
目前我已经重新实现QGraphicsView并覆盖了鼠标滚动功能,因此它不会滚动图像(就像默认情况下那样).
void MyQGraphicsView::wheelEvent(QWheelEvent *event)
{
if(event->delta() > 0)
{
emit mouseWheelZoom(true);
}
else
{
emit mouseWheelZoom(false);
}
}
Run Code Online (Sandbox Code Playgroud)
因此,当我滚动时,如果鼠标滚轮向前移动,如果鼠标滚轮向后,我发出的信号为真.
然后我将这个信号连接到处理我的GUI内容的类中的插槽(缩放功能见下文).现在基本上我认为我的缩放功能根本不是最好的方法我已经看到一些人使用overriden wheelevent函数设置比例的例子,但我真的找不到完整的答案.
所以相反,我已经做到了这一点,但它无论如何都不是完美的所以我正在寻找这个稍微调整一下或者在轮子事件功能中使用比例的工作示例.
我初始化m_zoom_level到0在构造函数中.
void Display::zoomfunction(bool zoom)
{
QMatrix matrix;
if(zoom && m_zoom_level < 500)
{
m_zoom_level = m_zoom_level + 10;
ui->graphicsView->setTransformationAnchor(QGraphicsView::AnchorUnderMouse);
matrix.scale(m_zoom_level, m_zoom_level);
ui->graphicsView->setMatrix(matrix);
ui->graphicsView->scale(1,-1);
}
else if(!zoom)
{
m_zoom_level = m_zoom_level - 10;
ui->graphicsView->setTransformationAnchor(QGraphicsView::AnchorUnderMouse);
matrix.scale(m_zoom_level, m_zoom_level);
ui->graphicsView->setMatrix(matrix);
ui->graphicsView->scale(1,-1);
}
}
Run Code Online (Sandbox Code Playgroud)
正如你在上面看到的那样,我正在使用QMatrix和缩放并将其设置为Graphicsview并将转换锚点设置为鼠标下方,但是如果我滚动加载它有时不能正常工作它只会开始放大(我认为这与int循环或其他东西有关).
正如我所说,帮助这个或鼠标下的规模的一个很好的例子将是伟大的.
我是Python的新手.我用固定坐标绘制了多边形和圆形.现在我想用鼠标移动这个多边形和圆圈到窗口上的其他位置.请指导我该怎么办?
import sys
from PyQt4.QtGui import *
from PyQt4.QtCore import *
class MyFrame(QWidget):
def __init__(self, parent=None):
QWidget.__init__(self)
def paintEvent(self, event=None):
paint=QPainter(self)
paint.setPen(QPen(QColor(Qt.green).dark(150),1,Qt.SolidLine))
segColor=QColor(Qt.green).dark(150)
paint.setBrush(segColor)
paint.setBrushOrigin(QPoint(225,225))
polygon=QPolygon([QPoint(250,175), QPoint(265,175), QPoint(250,190), QPoint(265,190),QPoint(250,175)])
paint.drawPolygon(polygon)
paint.setPen(QPen(QColor(Qt.red),1,Qt.SolidLine))
paint.setBrush(QBrush(Qt.NoBrush))
polygon1=QPolygon([QPoint(250,300), QPoint(250,500), QPoint(350,500), QPoint(350,300)])
paint.drawPolyline(polygon1)
paint.drawEllipse(50,50,50,50)
app=QApplication(sys.argv)
f=MyFrame()
f.show()
app.exec_()
Run Code Online (Sandbox Code Playgroud)