gpt4 book ai didi

c++ - QGraphicsView 中的事件

转载 作者:行者123 更新时间:2023-11-28 03:49:46 24 4
gpt4 key购买 nike

我无法让 QGraphicsView 中的事件正常工作。我已将 QGraphicsView 子类化并尝试重载 mousePressEventwheelEvent。但是 mousePressEventwheelEvent 都没有被调用。

这是我的代码(现在编辑了一些东西):

声明:

#include <QGraphicsView>
#include <QGraphicsScene>
class rasImg: public QGraphicsView
{
public:
rasImg(QString file);
~rasImg(void);
initialize();
QGraphicsView *view;
QGraphicsScene *scene;
private:
virtual void mousePressEvent (QGraphicsSceneMouseEvent *event);
virtual void wheelEvent ( QGraphicsSceneMouseEvent * event );
}

定义:

#include "rasImg.h"
void rasImg::initialize()
{
view = new QGraphicsView();
scene = new QGraphicsScene(QRect(0, 0, MaxRow, MaxCol));
scene->addText("HELLO");
scene->setBackgroundBrush(QColor(100,100,100));
view->setDragMode(QGraphicsView::ScrollHandDrag);
view->setScene(scene);
}
void rasImg::mousePressEvent (QGraphicsSceneMouseEvent *event)
{
qDebug()<<"Mouse released";
scene->setBackgroundBrush(QColor(100,0,0));
}
void rasImg::wheelEvent ( QGraphicsSceneMouseEvent * event )
{
qDebug()<<"Mouse released";
scene->setBackgroundBrush(QColor(100,0,0));
}

那么,我做错了什么?
为什么我在单击 View 或使用鼠标滚轮时没有看到消息或背景颜色发生变化?

最佳答案

您没有收到事件,因为它们是由您正在创建的 scene 对象处理的,而不是您的类。

rasImg 中删除 QGraphicsScene *scene; 并为构造函数尝试这样的操作:

rasImg::rasImg(QString file)
: QGraphicsScene(QRect(0, 0, MaxRow, MaxCol))
{
addText("HELLO");
setBackgroundBrush(QColor(100,100,100));
setDragMode(QGraphicsView::ScrollHandDrag);

view = new QGraphicsView();
view->setScene(this);
}

如果你想分两步完成,你可以这样做:

rasImg::rasImg(QString file)
: QGraphicsScene()
{
// any constructor work you need to do
}


rasImg::initialize()
{
addText("HELLO");
setSceneRect(QRect(0, 0, MaxRow, MaxCol));
setBackgroundBrush(QColor(100,100,100));
setDragMode(QGraphicsView::ScrollHandDrag);

view = new QGraphicsView();
view->setScene(this);
}

重点是显示的场景必须是 rasImg 的实际实例,而不是 QGraphicsScene 的实例。

如果它是您正在子类化的 View ,请执行相同的操作。您显示的 View 必须是您的类的实例,而不是普通的 QGraphicsView

rasImg::rasImg(QString file)
: QGraphicsView()
{
// constructor work
}

void rasImg::initialize()
{
scene = new QGraphicsScene(QRect(0, 0, MaxRow, MaxCol));
scene->addText("HELLO");
scene->setBackgroundBrush(QColor(100,100,100));

setDragMode(QGraphicsView::ScrollHandDrag);
setScene(scene);
}

关于c++ - QGraphicsView 中的事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5921289/

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