菜鸟教程小白 发表于 2022-12-12 23:48:20

c++ - ios上的QGestures


                                            <p><p>我正在尝试在 ios 上使用 qt 的手势,如下所示:</p>

<pre><code>#ifndef SWIPESTACKWIDGET_H
#define SWIPESTACKWIDGET_H

#include &lt;QStackedWidget&gt;
#include &lt;QSwipeGesture&gt;

class SwipeStackWidget : public QStackedWidget
{
Q_OBJECT
public:
    explicit SwipeStackWidget(QWidget *parent = 0);

    bool event(QEvent *event);
    bool gestureEvent(QGestureEvent *event);
    void swipeTriggered(QSwipeGesture *gesture);
signals:

public slots:

};

#endif // SWIPESTACKWIDGET_H
</code></pre>

<p>和</p>

<pre><code>#include &#34;swipestackwidget.h&#34;

#include &lt;QDebug&gt;

SwipeStackWidget::SwipeStackWidget(QWidget *parent) :
    QStackedWidget(parent)
{
    setAttribute(Qt::WA_AcceptTouchEvents);
    grabGesture(Qt::TapGesture);
    grabGesture(Qt::TapAndHoldGesture);
    grabGesture(Qt::PanGesture);
    grabGesture(Qt::PinchGesture);
    grabGesture(Qt::SwipeGesture);
}

bool SwipeStackWidget::event(QEvent *event)
{
    if (event-&gt;type() == QEvent::Gesture)
      return gestureEvent(static_cast&lt;QGestureEvent*&gt;(event));
    return QWidget::event(event);
}

bool SwipeStackWidget::gestureEvent(QGestureEvent *event)
{
    qDebug() &lt;&lt; &#34;gestureEvent():&#34; &lt;&lt; event-&gt;gestures().size();
    if (QGesture *swipe = event-&gt;gesture(Qt::SwipeGesture))
      swipeTriggered(static_cast&lt;QSwipeGesture *&gt;(swipe));
    if (QGesture *pan = event-&gt;gesture(Qt::PanGesture))
      qDebug() &lt;&lt; &#34;Pan&#34;;
    if (QGesture *pinch = event-&gt;gesture(Qt::PinchGesture))
      qDebug() &lt;&lt; &#34;Pinch&#34;;
    if (QGesture *pinch = event-&gt;gesture(Qt::TapGesture))
      qDebug() &lt;&lt; &#34;Tap&#34;;
    if (QGesture *pinch = event-&gt;gesture(Qt::TapAndHoldGesture))
      qDebug() &lt;&lt; &#34;Tapandhold&#34;;
    return true;
}

void SwipeStackWidget::swipeTriggered(QSwipeGesture *gesture)
{
    qDebug() &lt;&lt; &#34;swipeTriggered()&#34;;
    if (gesture-&gt;state() == Qt::GestureFinished) {
      if (gesture-&gt;horizontalDirection() == QSwipeGesture::Left) {
            qDebug() &lt;&lt; &#34;swipeTriggered(): swipe to previous&#34;;
            setCurrentIndex( std::max( 0, currentIndex()-1) );
      } else if (gesture-&gt;horizontalDirection() == QSwipeGesture::Right) {
            qDebug() &lt;&lt; &#34;swipeTriggered(): swipe to next&#34;;
            setCurrentIndex( std::min( count()-1, currentIndex()+1) );
      }
      update();
    }
}
</code></pre>

<p>我可以编译代码并在 iphone 上执行它。我确实收到了标签手势和 tabAndHold 可靠。 Pan 和 Pimch 有时确实会出现。滑动是个大问题:</p>

<ol>
<li>它只出现在 3 个手指上</li>
<li>仅在向下或向右滑动时出现</li>
<li>它只是偶尔出现</li>
<li>滑动到底部有时被识别为下一个,有时被识别为向左</li>
</ol>

<p>有没有人在 ios 上使用 QGestures 的经验可以帮助我?</p>

<p>我的测试类直接在主窗口中使用,我也在主窗口中使用了 grabGestures 命令,但我不在那里处理手势。</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>我可以确认它需要三个手指。我在 iPad 上使用 PyQt、Qt5.3.1 进行了测试。 (另外,平移需要两个手指。)</p>

<p>我怀疑 Qt 是这样设计的,所以跨平台是一样的(选择 Ubuntu 上常见的手指计数,因为 Canonical 可能贡献了大部分代码?)</p>

<p>在 iOS SDK 中,一些基本手势类可针对手指数量和方向进行配置。 <a href="http://iosdevelopertips.com/event-handling/gestures-recognizers-tap-pinchzoom-rotate-swipe-pan-long-press.html" rel="noreferrer noopener nofollow">Read more.</a>这只是相关的,因为这意味着如果 Qt 订阅了原生手势,Qt 可以轻松配置 Qt 订阅的原生手势。您可以查看 Qt 的代码(用于 iOS 平台抽象 QPA 和其他与手势相关的代码),以验证他们为滑动设计了 3 个手指(这不是错误。)</p>

<p>但iOS平台上的三指向上滑动物理手势应该是“隐藏应用程序并显示系统托盘”吗? (这是我的经验,我不能引用 iOS HIG,也不知道 App Store 需要什么。)如果是这样,那么应用应该订阅 Qt 的滑动手势并遵循指南。</p>

<p>但是你也可以在 Qt 中实现一个识别器来单指滑动?</p></p>
                                   
                                                <p style="font-size: 20px;">关于c&#43;&#43; - ios上的QGestures,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/24725088/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/24725088/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: c&#43;&#43; - ios上的QGestures