我正在尝试在QGraphicsView
打开时更改ScrollHandDrag
的光标,但它似乎不起作用。
如果我禁用ScrollHandDrag
但我没有激活,我可以更改光标,我看不出我可能做错了什么......
Bellow是重现问题的代码的一部分:
QApplication app(argc, argv);
QGraphicsScene scene;
QRect rectangle(-8, -4, 100, 100);
QPen pen(Qt::blue, 1, Qt::SolidLine);
scene.addRect(rectangle, pen);
scene.setBackgroundBrush(Qt::white);
QGraphicsView vue(&scene);
vue.setFixedSize(250, 250);
//vue.setDragMode(QGraphicsView::ScrollHandDrag);
vue.setCursor(Qt::CrossCursor);
vue.show();
return app.exec();
答案 0 :(得分:12)
QGraphicsView
会在拖动时自动更改光标,但您可以通过重新实现一些功能轻松解决此问题:
class CoolView : public QGraphicsView
{
protected:
void enterEvent(QEvent *event)
{
QGraphicsView::enterEvent(event);
viewport()->setCursor(Qt::CrossCursor);
}
void mousePressEvent(QMouseEvent *event)
{
QGraphicsView::mousePressEvent(event);
viewport()->setCursor(Qt::CrossCursor);
}
void mouseReleaseEvent(QMouseEvent *event)
{
QGraphicsView::mouseReleaseEvent(event);
viewport()->setCursor(Qt::CrossCursor);
}
};
答案 1 :(得分:2)
在Qt的源代码中,看起来当你进入拖动模式时它们会控制那个光标,并且无法阻止它们尝试。
我所知道的唯一解决方法是使用QApplication::setOverrideCursor()
和QApplication::restoreOverrideCursor()
来全局设置游标。不幸的是,这意味着您必须对鼠标光标何时进入/离开QGraphicsView
进行大量管理,以防止整个应用程序无法在任何地方卡住相同的光标。
还值得注意的是,光标设置在视口级别,因此稍微更适合vue.viewport()->setCursor(Qt::CrossCursor)
参考文档:
QApplication::setOverrideCursor