gpt4 book ai didi

c++ - 如果传递给 QGraphicsRectItem Qt c++,则更改光标

转载 作者:搜寻专家 更新时间:2023-10-31 02:05:46 25 4
gpt4 key购买 nike

如果我越过像 QGraphicsRectItem 这样的矩形,我想更改光标。

我有一个继承自 QGraphicsView 的类,矩形显示在 QGraphicScene 中。

我使用 eventFilter 实现了鼠标事件。

问题是当我已经点击矩形时光标会改变,而我希望它在我传递时改变。我已经使用 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();
}

关于c++ - 如果传递给 QGraphicsRectItem Qt c++,则更改光标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51322489/

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