2015-04-02 72 views
1

我已经基于QGraphicsView创建了我自己的小部件。我这样做是为了重新实现一些鼠标事件这样:光标不会改变我的QGraphicsView

void Workspace::mouseMoveEvent(QMouseEvent *event) 
{ 
    qDebug() << (QString("Mouse move (%1,%2)").arg(event->x()).arg(event->y())); 

    QGraphicsView::mouseMoveEvent(event); 
} 

以及安装一个事件过滤器

bool Workspace::eventFilter(QObject* obj, QEvent* e) 
{ 
    if(e->type() == QEvent::Enter) 
     qDebug() << "Entered Workspace"; 
} 

我不喜欢默认的“手”的鼠标指针,虽然和我决定改变它使用

this->setCursor(Qt::CrossCursor); 

在我的构造函数。

虽然鼠标指针仅在小部件的第一个像素处变成十字,但会发生什么情况。当我进一步移动时,它会回到用于表示拖动功能的默认“手形”光标。

为什么会发生这种情况,如何将光标更改为我喜欢的任何内容?

+0

“Workspace”的大小是多少? – 2015-04-02 13:23:10

+0

这取决于窗口大小,从260x260开始。我确实发现了'QApplication :: setOverrideCursor(Qt :: CrossCursor)';'但我不知道它是否是最好的解决方案,但它确实按照它应该做的。 – dearn44 2015-04-02 13:30:07

回答

2

看来,使用

QApplication::setOverrideCursor(Qt::CrossCursor); 

进入widget时,和

QApplication::restoreOverrideCursor(); 
退出时

,做的伎俩。

我不知道为什么setCursor没有工作。

编辑

实际使用上面是不是一个好主意,因为它更简单,只需使用

QApplication::changeOverrideCursor(*mCurrentCursor); 

你将不必担心任何其他这种方式,QT会照顾堆栈入队/出队。

+1

如果它做你想要的... :) – 2015-04-02 13:35:01