为QWidget设置一致的鼠标光标

时间:2011-10-07 22:50:35

标签: qt qwidget mouse-cursor

我已经使用鼠标对QWidget进行了细分。 我使用setCursor将其光标更改为十字形。 它工作正常,但只要我按下鼠标按钮(例如绘制手绘线),光标就会变回应用程序光标。 请注意,我不想在mouseenter事件上使用setOverrideCursor,例如因为我只想更改此窗口小部件的游标而不是整个应用程序,并且我有一个更好的解决方法(如下所示)。

我目前的解决方案是使用 的setCursor(光标()); 在我重写的mousePressEvent(QMouseEvent * event)和mouseDoubleClickEvent(QMouseEvent * event)中 后者是因为出于某种原因双击也会将光标更改为应用程序光标片刻! 解决方法有效:)但我想看看是否有更好的解决方案,要求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) 再次,当我将鼠标悬停在我的控件上时,它会按预期更改光标,但是当我按下鼠标按钮时它会更改回应用程序光标(因此需要上述解决方法)

2 个答案:

答案 0 :(得分:1)

QApplication.setOverrideCursor(QtGui.QCursor(Qt.CrossCursor))

当QWidget关闭时,重新设置为原始光标

答案 1 :(得分:0)

好的我还没有找到任何答案,所以这是解决方法:

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();
}