我有使用鼠标在其上绘制的QWidget子类。 我使用setCursor将其光标更改为十字形状。 它工作正常,但只要我按下鼠标按钮(例如绘制手绘线),光标将变回应用程序光标。 请注意,我不希望在mouseenter事件上使用setOverrideCursor,例如因为我想仅为此小部件更改光标而不是整个应用程序,并且我有更好的解决方法(如下所示)。我目前的解决方案是使用 setCursor(cursor()); 在我重写的mousePressEvent(QMouseEvent *事件)和mouseDoubleClickEvent(QMouseEvent *事件) 后者是因为某种原因双击也将光标更改为应用程序光标一会儿! 解决方法工作:)但我想看看是否有更好的解决方案,要求QT不要改变光标。为QWidget设置一致的鼠标光标
我应该补充说没有激活拖放功能。
这里是要求一些源代码片段:
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)
同样,当我将鼠标悬停在我的控件上时,它会按预期更改光标,但是一旦按下鼠标按钮,它就会变回应用程序光标(因此需要上述工作空间d)
如果设置一个特定的光标一次(比方说,在构造函数),当鼠标经过该小部件,这就是光标应该出现的方式。一旦鼠标退出小部件,光标应该自动回到正常状态。当鼠标进入,离开或被点击时,你不需要做任何特别的改变。 –
你能否提供一些源代码? – Septagram
@ArnoldSpence那么我使用setCursor,它会自动改变光标,就像你说的输入,退出一样。但是,只有在未按下鼠标按钮时才应用光标。只要按下按钮,光标就会变回应用程序光标(如果预先调用setOverrideCursor,则会使用它,否则将使用OS默认值)。 – dashesy