【问题标题】:setCursor() on mousePressEvent(QMouseEvent *) does not change the cursor until mouse is released. (Qt v5.5.1)mousePressEvent(QMouseEvent *) 上的 setCursor() 在释放鼠标之前不会更改光标。 (Qt v5.5.1)
【发布时间】:2020-03-26 18:46:24
【问题描述】:

我正在使用 Qt5.5.1 为 CentOS 编写一个 Qt 应用程序。

void mouseReleaseEvent (QMouseEvent * event)
{
   setCursor (Qt::ArrowCursor); //Reset to default arrow cursor.
}

void mousePressEvent (QMouseEvent * event)
{
   setCursor (QCursor (QPixmap (":/Drag_and_Drop_bubble.png"))); //Customized cursor. This works well when set inside constructor (during initialization).
}

要求:我希望鼠标左键单击时光标会发生变化。光标应保持直到释放鼠标单击。松开鼠标后,光标应重置为默认光标。

问题说明:鼠标左键点击光标没有变化。只有在我释放左键后它才会改变[验证这一点:我在 mouseReleaseEvent() 中注释了 setCursor() 函数]。为什么鼠标左键单击后鼠标释放前光标没有变化?有人遇到过这样的问题吗?

感谢您的帮助。

【问题讨论】:

  • 自己无法复制该问题。确保 Drag_and_Drop_bubble.png 在资源中可用。您是否尝试过使用预定义的光标,例如 Qt::PointingHandCursor?您能发布最小的可重现示例吗?
  • @Meliodas 我正在通过 VNC 查看器远程访问机器。如果我直接在机器上使用鼠标(没有遥控器)会出现气泡光标,并且使用HMI的触摸显示器也会出现(在触摸显示器上工作)。现在的问题是由于 VNC,因为 VNC 不显示光标已更新为气泡光标。它仅在触发 mouseReleaseEvent() 时显示。
  • @Meliodas Drag_and_Drop_bubble.png 资源正确可用,因为它在 mouseReleaseEvent() 触发器上显示。当我通过 VNC 访问时,气泡光标也会出现在监视器上,但在 VNC Viewer 上看不到相同的气泡光标。

标签: qt user-interface


【解决方案1】:

可能是它没有立即更新用户界面。我以前也有过这种情况。

试试这个:

void mouseReleaseEvent (QMouseEvent * event)
{
   setCursor (Qt::ArrowCursor); //Reset to default arrow cursor.
   this->update();         
}

void mousePressEvent (QMouseEvent * event)
{
   setCursor (QCursor (QPixmap (":/Drag_and_Drop_bubble.png"))); //Customized cursor. This works well when set inside constructor (during initialization).
}

如果它不起作用,你的类是从什么派生的? (这样我可以尝试重新创建这些函数)

【讨论】:

  • 这个问题是因为 VNC 查看器,因为我正在远程访问系统。但是,在使用鼠标/触摸屏幕直接访问系统时,气泡光标会正确显示。当我通过 VNC 访问时,气泡光标也会出现在监视器上,但在 VNC Viewer 上看不到相同的气泡光标。
  • @PankajKumarThapa 嗨,很抱歉造成误解。不幸的是,我不知道如何为您提供帮助。你可以在 Qt 论坛上问同样的问题。那里有很多人可能知道您的问题的答案/
猜你喜欢
  • 1970-01-01
  • 2018-12-01
  • 2016-08-04
  • 1970-01-01
  • 2013-10-30
  • 2018-06-10
  • 2010-11-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多