У меня есть подкласс QWidget для рисования на нем с помощью мыши.
Я использую setCursor, чтобы изменить его курсор в форме креста.
Он работает нормально, но как только я нажимаю на него кнопку мыши (например, чтобы нарисовать линию от руки), курсор снова возвращается к курсору приложения.
Обратите внимание, что я не хочу использовать setOverrideCursor для события mouseenter, например, потому что я хочу изменить курсор только для этого виджета, а не для всего приложения, и в любом случае у меня есть лучший обходной путь (как показано ниже).
Мое текущее решение заключается в использовании
SetCursor (курсор ());
в моих переопределенных mousePressEvent (событие QMouseEvent *) и mouseDoubleClickEvent (событие QMouseEvent *)
Последнее потому, что по какой-то причине двойной щелчок также на мгновение меняет курсор на курсор приложения!
Обходной путь работает :), но я хотел бы посмотреть, есть ли лучшее решение, которое просит QT вообще не менять курсор.
Я должен добавить, что перетаскивание не активировано.
Вот некоторый фрагмент исходного кода по запросу:
class MyWidget : public QWidget
{
void paintEvent( QPaintEvent * /*event*/ );
void resizeEvent( QResizeEvent * event );
void mouseDoubleClickEvent ( QMouseEvent * event );
void mousePressEvent( QMouseEvent* event );
void mouseReleaseEvent( QMouseEvent* event );
void mouseMoveEvent( QMouseEvent* event );
void wheelEvent( QWheelEvent* event );
}
Затем я переопределяю следующее (для обхода проблемы)
void MyWidget::mouseDoubleClickEvent(QMouseEvent * event)
{
// ... do some other stuff ...
// This is a workaround to prevent the cursor from changing
setCursor(cursor());
event->accept();
}
void MyWidget::mousePressEvent(QMouseEvent * event)
{
// ... do some other stuff ...
// This is a workaround to prevent the cursor from changing
setCursor(cursor());
event->accept();
}
Чтобы изменить курсор, предполагая, что экземпляр класса mywidget
создан в моем классе, я делаю это: mywidget->setCursor(Qt::CrossCursor)
Опять же, он меняет курсор, как и ожидалось, когда я наводю курсор мыши на свой элемент управления, но он снова переключается на курсор приложения, когда я нажимаю кнопку мыши (таким образом, требуется обходной путь выше)