【问题标题】:Problems catching "Tap and hold" touch event on QPushButton in QT在 QT 中的 QPushButton 上捕获“点击并按住”触摸事件的问题
【发布时间】:2014-10-17 11:46:22
【问题描述】:

我有一个QPushButton 连接到pressed() 信号,并设置autoRepeat=true。

单击(使用鼠标)按钮会更新一个数字,并且当您单击并按住它时会重复。

这适用于鼠标。单击步骤一次,单击并按住重复它。使用触摸屏进行简单的点击可以正常工作,但不会在“点击并按住”时重复。

我曾尝试在 Windows 8 中禁用“点击并按住右键单击”设置,但这并没有帮助。它只会阻止发生右键单击。

如果我点击 QPushButton 并将手指从按钮上移开(同时仍然按住),然后将手指移回 QPushButton 的工作区,则按下()事件将开始自动重复。

MyPanel.ui:

<widget class="QPushButton" name="UpButton">
  <property name="text">
    <string/>
  </property>
  <property name="autoRepeat">
    <bool>true</bool>
  </property>
</widget>

<connection>
  <sender>UpButton</sender>
  <signal>pressed()</signal>
  <receiver>my_panel</receiver>
  <slot>UpAction()</slot>
  <hints>
    <hint type="sourcelabel">
      <x>40</x>
      <y>261</y>
    </hint>
    <hint type="destinationlabel">
      <x>121</x>
      <y>37</y>
    </hint>
  </hints>
</connection>

MyPanel.cpp:

void MyPanel::UpAction()
{
    myNumber += 1;
}

【问题讨论】:

  • 您是否尝试过使用Qt::TapAndHoldGesture?

标签: c++ qt windows-8 touch multi-touch


【解决方案1】:

不要忘记查看官方文档——Gestures Programming。在那里您可以找到有关处理手势的有用信息。

你忘了抓住你的手势,在你的QPushButton上设置grabGesture(Qt::TapAndHoldGesture);。当您启用此功能时,您的QPushButton 开始通过其event 获取TapAndHoldGestures。所以你需要让你的按钮类继承自 QPushButton 并覆盖 event 方法。您现在可以控制手势识别和处理的整个过程。看看例子Image Gestures Example。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-06
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多