在 QGraphicsView 中更改光标
Changing the cursor in a QGraphicsView
本文关键字:光标 QGraphicsView 更新时间:2023-10-16
我正在尝试在ScrollHandDrag
打开时更改QGraphicsView
的光标,但它似乎不起作用。如果我禁用ScrollHandDrag
,我可以更改光标,但不能在它处于活动状态时更改光标,我看不到我可能做错了什么......
波纹管是重现该问题的代码的一部分:
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();
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);
}
};
从Qt的源代码中闲逛来看,当您进入拖动模式时,它们似乎会控制该光标,并且无法阻止它们尝试。
我知道的唯一解决方法是使用 QApplication::setOverrideCursor()
和 QApplication::restoreOverrideCursor()
这将全局设置光标。不幸的是,这意味着您必须对鼠标光标何时进入/离开QGraphicsView
进行大量管理,以防止整个应用程序在任何地方都卡在同一个光标上。
还值得注意的是,光标设置在视口级别,因此这样做会稍微合适一些vue.viewport()->setCursor(Qt::CrossCursor)
参考文档:
Q应用程序::设置覆盖光标
Q应用程序::恢复覆盖光标
Q应用程序::更改覆盖光标
相关文章:
- 如何在Qt C++中更改光标
- Win32 API 控制台光标在 WriteConsole 后不移动
- 调整布局上的 QGraphicsView 小部件的大小
- 在 macOS 中使用 C/C++ 设置鼠标光标图像
- 将 QGraphicsView 或 Scene 转换为 XML/JSON
- 如何更改输出的位置或光标在输出处,以便在"Code Blocks"中C++
- 使用 C++将文本光标移动到屏幕中不可见的行
- 在 C# 中更改鼠标光标图标
- ASCII 旋转光标 (TUI) 动画出现问题
- 将鼠标悬停在图片框上时,如何显示带有 x-y 坐标的十字准线光标?
- 如何在QGraphicsView中移动QWidget?
- 将光标单独移动到当前位置
- 如何获得鼠标光标连接时按下左键单击和在C++中释放左键单击时?
- 由于选项卡顺序的原因,鼠标光标总是得到错误的hwnd-MFC应用程序
- 如何在C++中模拟鼠标光标的移动
- 如何确定鼠标光标所在的控制台字符
- 如何在C++中使用光标定位
- 如何在QML中设置鼠标光标位置
- 如果传递到QGraphicsRectItem Qt c++,请更改光标
- 在 QGraphicsView 中更改光标