我已经使用鼠标对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)
再次,当我将鼠标悬停在我的控件上时,它会按预期更改光标,但是当我按下鼠标按钮时它会更改回应用程序光标(因此需要上述解决方法)
答案 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();
}