Qt子类化的图形场景不允许我选择/聚焦到它上面的图形项目
Qt subclassed graphics scene does not allow me select/focus to graphics item on it
我已经将我自己的qgraphicsview子类化了,因为我想在点击时从带有位置的场景发送信号,在这个场景中还有我的子类图形itms,它们是可选择和可聚焦的。问题是,当我在场景中实现自己的mousepressed/mousemoved/mousereleased事件处理程序时,我突然无法选择场景中的任何内容。
以下是我对图形场景的实现:
/////////////////////HEADER//////////////
#include <QGraphicsScene>
class myGraphicsScene : public QGraphicsScene
{
Q_OBJECT
public:
explicit myGraphicsScene(QObject * parent = 0);
explicit myGraphicsScene(qreal x, qreal y, qreal width, qreal height, QObject * parent = 0);
signals:
void mouseReleased(QPointF pos);
void mousePressed(QPointF pos);
void mouseMoved(QPointF pos);
void mouseDoubleClicked(QPointF pos);
protected:
void mouseDoubleClickEvent (QGraphicsSceneMouseEvent * event);
void mousePressEvent(QGraphicsSceneMouseEvent * event);
void mouseMoveEvent(QGraphicsSceneMouseEvent * event);
void mouseReleaseEvent(QGraphicsSceneMouseEvent * event);
////////////////////CPP//////////////////////
#include <QGraphicsSceneMouseEvent>
myGraphicsScene::myGraphicsScene(QObject *parent) : QGraphicsScene(parent)
{
}
myGraphicsScene::myGraphicsScene(qreal x, qreal y, qreal width, qreal height, QObject *parent)
: QGraphicsScene( x, y, width, height, parent )
{
}
void myGraphicsScene::mouseDoubleClickEvent ( QGraphicsSceneMouseEvent *event )
{
QGraphicsScene::mouseDoubleClickEvent ( event );
emit mouseDoubleClicked ( event->scenePos () );
}
void myGraphicsScene::mousePressEvent (QGraphicsSceneMouseEvent *event)
{
QGraphicsScene::mousePressEvent ( event );
emit mousePressed ( event->scenePos () );
}
void myGraphicsScene::mouseMoveEvent (QGraphicsSceneMouseEvent *event)
{
QGraphicsScene::mouseMoveEvent ( event );
emit mouseMoved ( event->scenePos () );
}
void myGraphicsScene::mouseReleaseEvent (QGraphicsSceneMouseEvent *event)
{
QGraphicsScene::mousePressEvent ( event );
emit mouseReleased ( event->scenePos () );
}
哪个事件实现是错误的
附言:当我评论掉mousePressed/moved/released的实现时,它就像魅力一样。
我怀疑问题在于调用QGraphicsScene::mouseMoveEvent这样的事件时,可能会将事件设置为正在处理。正如QGraphicsSceneMouseEvent为接受的标志所述:-
设置accept参数表示事件接收器想要该事件。不需要的事件可能会传播到父窗口小部件默认情况下,isAccepted()设置为true,但不要依赖于此,因为子类可能会选择在其构造函数中清除它
您可以尝试在每个重载事件中调用event->setAccepted(false),以发出要传播的事件的信号。
相关文章:
- C++图形类指针混淆
- 我的代码中有错误吗?使用BGI图形的C++代码对我不起作用
- 如何在内核C++中使用1920x1080x16M图形或类似的16M颜色?(VGA)
- 这是实现图形的坏方法吗
- 打印 ONNXRUNTIME::图形没有模型
- 提升如何在图形可视化中写入边缘的权重?
- Doxygen - 如何在不生成图形的情况下生成文本调用关系结果
- C++ 中的图形菜单
- 将图形属性与 std::unique_ptr 捆绑在一起
- 从流到邻接列表的向量读取图形
- 替代在python中制作邻接列表与图形问题的字典?(如 C++ 中的 vector<vector<int&g
- 将图形表示为unordered_map<字符串、向量>时拓扑排序错误<string>
- 直接显示手动图形内存泄漏
- Directx 12 :在两个进程之间共享图形内存
- Microsoft C++ 用于图形 API 的 Rest SDK
- 如何将到达图形视图右侧(末端)的QGraphicsPixmapItem移动到左侧(开始)侧(就像在贪吃蛇游戏中发生的事情
- 图形初学者C++(跳过控制台)?
- 在 cpp 中最简单的图形实现
- 提升图形库:资源受限的最短周期
- Qt子类化的图形场景不允许我选择/聚焦到它上面的图形项目