QGestures on ios
QGestures on ios
我正在尝试使用手势在ios与qt像这样:
#ifndef SWIPESTACKWIDGET_H
#define SWIPESTACKWIDGET_H
#include <QStackedWidget>
#include <QSwipeGesture>
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
和
#include "swipestackwidget.h"
#include <QDebug>
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->type() == QEvent::Gesture)
return gestureEvent(static_cast<QGestureEvent*>(event));
return QWidget::event(event);
}
bool SwipeStackWidget::gestureEvent(QGestureEvent *event)
{
qDebug() << "gestureEvent():" << event->gestures().size();
if (QGesture *swipe = event->gesture(Qt::SwipeGesture))
swipeTriggered(static_cast<QSwipeGesture *>(swipe));
if (QGesture *pan = event->gesture(Qt::PanGesture))
qDebug() << "Pan";
if (QGesture *pinch = event->gesture(Qt::PinchGesture))
qDebug() << "Pinch";
if (QGesture *pinch = event->gesture(Qt::TapGesture))
qDebug() << "Tap";
if (QGesture *pinch = event->gesture(Qt::TapAndHoldGesture))
qDebug() << "Tapandhold";
return true;
}
void SwipeStackWidget::swipeTriggered(QSwipeGesture *gesture)
{
qDebug() << "swipeTriggered()";
if (gesture->state() == Qt::GestureFinished) {
if (gesture->horizontalDirection() == QSwipeGesture::Left) {
qDebug() << "swipeTriggered(): swipe to previous";
setCurrentIndex( std::max( 0, currentIndex()-1) );
} else if (gesture->horizontalDirection() == QSwipeGesture::Right) {
qDebug() << "swipeTriggered(): swipe to next";
setCurrentIndex( std::min( count()-1, currentIndex()+1) );
}
update();
}
}
我可以编译代码并在iphone上执行。我确实可靠地接收tab手势和tabAndHold。潘和皮姆奇有时确实会发生。滑动是个大问题:
- 只有3个手指才会出现
- 只在向下或向右滑动时出现
- 有时才出现
- 向下滑动有时被认为是下一个,有时被认为是左
有没有人有在ios上使用QGestures的经验,可以帮助我?
我的测试类直接在主窗口中使用,我在主窗口中也使用grabGestures命令,但我不处理那里的手势。
我可以确认它需要三个手指。我在iPad上用PyQt Qt5.3.1进行了测试。(而且,平底锅需要两个手指。)
我怀疑Qt是这样设计的,所以它在各个平台上都是一样的(选择在Ubuntu上常见的手指数,因为Canonical可能贡献了大部分代码?)
在iOS SDK中,一些基本手势类可以配置手指的数量和方向。阅读更多。这是唯一相关的,因为这意味着Qt可以很容易地配置Qt订阅的本地手势,如果他们订阅本地手势。你可以看看Qt的代码(用于iOS平台抽象QPA和其他手势相关代码),以验证他们为滑动设计了3个手指(这不是一个bug)。
但是在iOS平台上,3指向上滑动的物理手势应该意味着"隐藏应用并显示系统托盘"吗?(这是我的经验,我不能引用iOS HIG,也不知道App Store需要什么。)如果是这样,那么应用程序应该订阅Qt的滑动手势并遵循指南。
但你也可以在Qt中实现一个识别器,为一个手指滑动?
相关文章:
- 使用ios:ate写入到流会覆盖现有文件
- 瓦尔格林德:数学函数"Conditional jump or move depends on uninitialised value(s)"
- 如何访问RTCVideoRenderer的帧?(ios)
- ios::fmtflags 在 C++ 中是如何工作的?setf() 是如何工作的?
- 我可以在 iOS 或 mac 应用程序中使用C++代码吗?
- "string.h"在构建适用于iOS的qt应用程序中找不到消息
- 为什么 C++ 11 在 ios 类中添加了运算符 bool
- 循环挂起迭代的 std::擦除 on std::list
- SIGSEGV on Boost UDP 套接字关闭 - tcache_get at malloc.c.
- CPP 中的瓦尔格林德和记忆泄漏:"Conditional jump or move depends on uninitialised values"
- 'string'文件在带有C++文件的iOS插件上找不到
- std::bind on statd::array 的运算符 []
- 您将如何连接"on the fly"文本+整数并将其传递给函数?
- 如何修复输出日志中的"EnableInput can only be specified on a Pawn for its Controller"错误
- VS2019 - Sudo Remote Debugging on Linux with Cmake project
- 文件模式标志"ios::app"是否用于删除文件(如果文件已存在)?
- C++ library with Tensorflow on Android
- SFML 交叉编译 for Windows on Linux.
- iOS GL ES exc_bad_access on glDrawElements
- QGestures on ios