1
votes

I have created my own widget based on QGraphicsView. I did this in order to re-implement some mouse events as such:

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

    QGraphicsView::mouseMoveEvent(event); 
}

as well as install an event filter

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

I did not liked the default 'hand' mouse pointer though and I decided to change it using

this->setCursor(Qt::CrossCursor);

in my constructor.

What happens though is the mouse pointer changing into a cross only while being at the very first pixel of the widget. The moment I move further in it goes back to the default 'hand' cursor that is used to signify drag functionality.

Why is this happening and how can I change the cursor to whatever I like?

1
What's the size of your Workspace ? - Thomas Ayoub
It depends on the window size, starts at 260x260. I did discover QApplication::setOverrideCursor(Qt::CrossCursor); though, I don't know if it is the best solution but it does what its supposed to. - dearn44

1 Answers

3
votes

It seems that using

QApplication::setOverrideCursor(Qt::CrossCursor);

when entering the widget, and

QApplication::restoreOverrideCursor();

when exiting, does the trick.

I am not sure why setCursor did not work though.

EDIT

Actually using the above is not such a good idea, as it is simpler to just use

QApplication::changeOverrideCursor(*mCurrentCursor);

you will not have to worry about anything else this way, Qt will take care of stack en-queue/de-queue.