c++ - 如果传递给 QGraphicsRectItem Qt c++,则更改光标
问题描述
如果我越过像QGraphicsRectItem
.
我有一个继承自的类,QGraphicsView
矩形显示在QGraphicScene
.
我用eventFilter
.
问题是当我已经点击矩形时光标会改变,而我希望它在我传递它时改变。我已经用 a 改变了光标QAbstractButton
,但是QGraphicsRectItem::enterEvent(event)
不起作用。
这是我的代码QAbstractButton
:
void ToggleButton::enterEvent(QEvent *event) {
setCursor(Qt::PointingHandCursor);
QAbstractButton::enterEvent(event);
}
在这种情况下,它可以工作。
这是我的代码来检测我是否传递了一个矩形:
DetecRect::DetecRect(QWidget* parent) :
QGraphicsView(parent)
{
scene = new QGraphicsScene(this);
pixmapItem=new QGraphicsPixmapItem(pixmap);
scene->addItem(pixmapItem);
this->setScene(scene);
this->setMouseTracking(true);
scene->installEventFilter(this);
}
bool DetecRect::eventFilter(QObject *watched, QEvent *event)
{
if(watched == scene){
// press event
QGraphicsSceneMouseEvent *mouseSceneEvent;
if(event->type() == QEvent::GraphicsSceneMousePress){
mouseSceneEvent = static_cast<QGraphicsSceneMouseEvent *>(event);
if(mouseSceneEvent->button() & Qt::LeftButton){
}
// move event
} else if (event->type() == QEvent::GraphicsSceneMouseMove) {
mouseSceneEvent = static_cast<QGraphicsSceneMouseEvent *>(event);
//selectedItem is a QGraphicsItem
if(this->selectedItem && this->selectedItem->type() == QGraphicsRectItem::Type){
selectedItem->setCursor(Qt::PointingHandCursor);
}
}
// release event
else if (event->type() == QEvent::GraphicsSceneMouseRelease) {
mouseSceneEvent = static_cast<QGraphicsSceneMouseEvent *>(event);
}
}
return QGraphicsView::eventFilter(watched, event);
}
在这段代码中,如果我单击一次,光标会发生变化。但是如果我直接通过就不要更改。为什么?
解决方案
您不必实现 hoverEnterEvent 方法或 hoverLeaveEvent,您只需将光标设置到项目,如下所示:
#include <QApplication>
#include <QGraphicsRectItem>
#include <QGraphicsView>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QGraphicsView view;
QGraphicsScene *scene = new QGraphicsScene(&view);
view.setScene(scene);
QGraphicsRectItem *rit = scene->addRect(QRectF(-50, -50, 100, 100), QPen(Qt::black), QBrush(Qt::gray));
rit->setCursor(Qt::CrossCursor);
QGraphicsRectItem *rit2 = new QGraphicsRectItem(QRectF(-50, -50, 100, 100));
rit2->setPen(QPen(Qt::white));
rit2->setBrush(QBrush(Qt::green));
rit2->setCursor(Qt::PointingHandCursor);
rit2->setPos(200, 100);
scene->addItem(rit2);
view.resize(640, 480);
view.show();
return a.exec();
}
推荐阅读
- python - AWS EB 上的 Flask 应用程序总是给我一个 500 内部服务器错误
- python - ImportError:无法确定 numexpr 的版本
- java - spring-cloud-dependencies、spring-cloud-context 和 spring-cloud-commons 之间有什么区别?
- c# - 在 C# 中使用 WebClient 下载 CSV 文件,但文件大小小于使用浏览器下载时的大小
- c# - 通过 c# .net Core 中的套接字连接将 Graph QL 查询作为消息发送
- java - JavaFX 和 jnativehook 库冲突
- xamarin.ios - 在 Xamarin 中如何等效于 UIImage.withTintColor?
- flutter - 当我从 firebase 读取数据时,它会显示我的数据。但它也显示所有用户数据。不仅是我的数据。但我只想要我的数据。不是其他用户
- html - 如何在 vuejs 中加载 html 模板
- java - 使用 Java 在外部显示器上播放视频