标签: qgraphicsview

QGraphicsView使用鼠标滚轮在鼠标位置放大和缩小

我有一个应用程序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_level0在构造函数中.

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循环或其他东西有关).

正如我所说,帮助这个或鼠标下的规模的一个很好的例子将是伟大的.

c++ qt qgraphicsview

25
推荐指数
7
解决办法
4万
查看次数

Qt的GIF动画

我已经使用QGraphicsView,QGraphicsScene类为了显示在这样的小部件的图片:

m_Scene->addPixmap(QPixmap(fileName));
m_View->setScene(m_Scene);
Run Code Online (Sandbox Code Playgroud)

如何在同一场景中显示.gif动画?

c++ qt qgraphicsview

23
推荐指数
2
解决办法
6万
查看次数

如何在QGraphicsView中平移图像

我目前能够将我的图像加载到grahpics场景中,然后再加载到QGraphicsViewer中.

我可以通过检测QEvent :: Wheel然后调用graphicsViews的scale()函数来实现缩放功能.

但是,我似乎无法弄清楚如何使平移功能正常工作.我基本上想要检测鼠标何时单击图像,然后将图像与鼠标一起向左,向右,向上或向下移动.

截至目前,我基本上有一个MouseFilter类,它正在检测事件,并根据事件类型执行不同的操作.我将该监听器附加到QGraphicsView对象

c++ graphics qt qgraphicsview

21
推荐指数
3
解决办法
1万
查看次数

如何将QGraphicsScene/View设置为特定的坐标系

我想在多边形中绘制多边形QGraphicsScene但多边形具有纬度/经度位置.在一个equirectangular投影中,坐标来自:

                       ^
                      90
                       |
                       |
-180----------------------------------->180
                       |
                       |
                     -90
Run Code Online (Sandbox Code Playgroud)

如何设置QGraphicsScene/ QGraphicsView到这样的投影?

非常感谢,

卡洛斯.

qt projection qgraphicsview qgraphicsscene

20
推荐指数
1
解决办法
2万
查看次数

QGraphicsItem不接收鼠标悬停事件

我有一个派生自的类QGraphicsView,其中包含 - QGraphicsItem派生元素.我希望这些元素在鼠标光标悬停在它们上面时改变颜色,所以我实现了hoverEnterEvent(和hoverLeaveEvent):

void MyGraphicsItem::hoverEnterEvent(QGraphicsSceneHoverEvent* event)
{
    update (boundingRect());
}
Run Code Online (Sandbox Code Playgroud)

但是,此事件处理程序代码永远不会执行.我明确启用了鼠标跟踪:

MyGraphicsView::MyGraphicsView(MainView *parent) :
    QGraphicsView(parent)
{
    setMouseTracking(true);
    viewport()->setMouseTracking(true);
    ...
}
Run Code Online (Sandbox Code Playgroud)

不过,没有运气.我究竟做错了什么?

c++ events qt qgraphicsview qgraphicsitem

19
推荐指数
2
解决办法
9708
查看次数

在QGraphicsScene类中跟踪鼠标移动

我将QGraphicsScene子类化,并添加方法mouseMoveEvent来处理鼠标移动事件.我在GraphicsView上创建了一个标尺,并使用标尺跟踪鼠标移动.在QGraphicsScene :: mousemoveEvent中,我将expliitely调用标尺小部件的mouseMoveEvent.目的是让标尺知道当前的鼠标位置.

现在,当我移动鼠标时,似乎没有调用QGraphicsScene :: mousemoveEvent.但是,如果我按住鼠标左键并按住按钮移动它,我可以使它工作.这不是我想看到的; 每当我将鼠标放在视图上并移动鼠标时,我都会调用此方法.

有没有解决方法?

qt qgraphicsview qobject qgraphicsscene

19
推荐指数
1
解决办法
2万
查看次数

如何在Graphics View框架中使用Qt Model/View框架

我正在研究地图应用程序,需要使用表格,表格和地图中的图形对象来显示数据对象.我正在使用PyQt,但这并不重要,因为这是一个Qt问题而不是Python问题.

如果我只需要表格和表单视图,这将很容易,我只使用Qt模型/视图框架.但是,我需要地图视图来提供仅使用Graphics View框架才真正可用的功能,这实际上是它自己的模型/视图框架,QGraphicsScene充当数据模型.

我可以想到两种方法来做到这一点.一种是从QAbstractItemModel子类化的权威模型开始,将其链接到QAbstractItemView的子类,并从那里生成并更新场景中的QGraphicsItems.这看起来很丑陋,因为我不知道如何通过与QGraphicsItem的交互来处理用户与数据项的交互和更改.

我能想到的另一种方法是将QGraphicsScene视为权威数据源,将数据对象存储在每个QGraphicsItem的.data()属性中.然后,我将QAbstractItemModel子类化并编写它,以便它在数据存储中访问场景中的数据,然后其他视图将其用作模型.我如何将更改传播到场景中的数据直到模型?

无论采取哪种方法,看起来框架都没有处理差距.在模型/视图中,假设所有更改都在模型中进行.在图形视图中,假定所有更改都在场景中进行.

那么你选择哪种方法QAbstractItemModel(权威) - > QAbstractItemView-> QGraphicsScene或者QGraphicsScene(权威) - > QAbstractItemModel->其他视图.你为什么选择一个而不是另一个?你有什么期望?有没有其他人需要弥合Qt的双模型/视图框架之间的差距,你是如何做到的?

qt qt4 pyqt pyqt4 qgraphicsview

16
推荐指数
1
解决办法
5344
查看次数

为什么部分在视图之外的矩形绘制为三角形?

我使用PySide的Python-Qt绑定,我想绘制一个场景,其中包括一个矩形,矩形不完全可见,因为视图应该只显示矩形未完全包含的场景的一部分.

这是一个最小的例子:

from PySide.QtGui import *

app = QApplication([])

scene = QGraphicsScene()
scene.addRect(0, 0, 100, 100)
view = QGraphicsView(scene)
view.setSceneRect(-60, 20, 100, 100)
view.show()

app.exec_()
Run Code Online (Sandbox Code Playgroud)

我希望看到矩形的下半部分,而不是看到三角形的下半部分!

在此输入图像描述

似乎没有考虑矩形的右下角.

三角形仅出现在特殊情况下(如示例中的特殊场景矩形),如果完整矩形可见则不会出现.

这是一个错误还是我做错了什么?可以修复吗?

我的系统:Windows 7上的Python 3.3 + PySide 1.2.2(64位)

python qt qgraphicsview pyside

16
推荐指数
1
解决办法
757
查看次数

Qt5 C++ QGraphicsView:图像不适合视图框

我正在制作程序,向用户显示由他选择的一些图片.但是有一个问题,因为我想在QGraphicsView的框架中放置这张图片,图片确实比框架小.

所以这是我的代码:

image = new QImage(data.absoluteFilePath()); // variable data is defined when calling this method
scn = new QGraphicsScene(this); // object defined in header
ui->graphicsView->setScene(scn);
scn->addPixmap(QPixmap::fromImage(*image));
ui->graphicsView->fitInView(scn->itemsBoundingRect(),Qt::KeepAspectRatio);
Run Code Online (Sandbox Code Playgroud)

我尝试了很多我在网上找到的解决方案,但没有人帮助我.当帧为200 x 400像素时,图片大小约为40 x 60像素.可能有什么不对?

以下是使用上面的代码生成的内容以及我想要获得的内容的一些示例: 在此输入图像描述

c++ qt image qgraphicsview

15
推荐指数
1
解决办法
1万
查看次数

QGraphicsItemGroup的事件

在我的应用程序中,我想使用QGraphicsItemGroup将项目分组到一个项目中.
我玩了一点但不确定使用它因为当我想要捕捉事件时,事件被合并在一起但我想要处理特定孩子的特定事件.
我怎样才能做到这一点?

c++ events qt qt4 qgraphicsview

12
推荐指数
2
解决办法
3613
查看次数