多点触摸问题

黑暗中的影子 2014-06-12 04:43:04
将Qt版本更新到5.3后,发现原来的多点触摸程序,现在无法识别到
QEvent::TouchBegin:
QEvent::TouchUpdate:
case QEvent::TouchEnd:
这些事件了,
而在原来4.8版本的Qt中完全正常,测试代码如下:
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow),
nextShowWidget(0),
currentWidget(0)
{
ui->setupUi(this);
setAttribute(Qt::WA_AcceptTouchEvents);//开启触摸功能
myWidget = new WidgetFactor(this);

myWidget->WidgetFactorCreat(this);
}

bool MainWindow::event(QEvent *event)
{
switch (event->type()) {
case QEvent::TouchBegin:
break;
case QEvent::TouchUpdate:
{
QTouchEvent *touchEvent = static_cast<QTouchEvent *>(event);
QList<QTouchEvent::TouchPoint> touchPoints = touchEvent->touchPoints();
const QTouchEvent::TouchPoint &touchPoint0 = touchPoints.first();
qreal currentScaleFactor = QLineF(touchPoint0.pos(), touchPoint0.startPos()).dx();

if(currentScaleFactor != 0) {
nextShowWidget = myWidget->WidgetFactorMove(currentScaleFactor > 0 ? NEXT : PRE,
currentScaleFactor,
currentWidget);
}

ui->label->setText(QString::number((int)currentScaleFactor, 10));
break;
}
case QEvent::TouchEnd:
{
currentWidget = myWidget->WidgetFactorShow(currentWidget, nextShowWidget);
return true;
}
default:
break;
}
return QWidget::event(event);
}


发现这段代码在5.3版本的Qt中无法识别触摸,求大虾帮助!!
...全文
313 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
草上爬 2016-04-11
  • 打赏
  • 举报
回复
学习了~~~,感谢版主大大分享
foruok 2014-06-13
  • 打赏
  • 举报
回复
bool Widget::event(QEvent *e)
{
    QEvent::Type type = e->type();
    switch(type)
    {
    case QEvent::TouchBegin:
        e->accept();
        dumpTouchEvent(e);
        return true;
    case QEvent::TouchUpdate:
        e->accept();
        dumpTouchEvent(e);
        return true;
    case QEvent::TouchEnd:
        e->accept();
        dumpTouchEvent(e);
        return true;
    case QEvent::TouchCancel:
        e->accept();
        dumpTouchEvent(e);
        return true;
    default:
        break;
    }
    return QWidget::event(e);
}
这是我的项目中的代码,可以用的。
foruok 2014-06-13
  • 打赏
  • 举报
回复
    switch (event->type()) {
    case QEvent::TouchBegin:
        event->accept();
        return true;
这样试试看。
黑暗中的影子 2014-06-13
  • 打赏
  • 举报
回复
引用 1 楼 foruok 的回复:
case QEvent::TouchBegin:
        break;
这里的代码,收到TouchBegin 事件时一定要 accept 一下。 欢迎给我投票:Qt on Android: Qt Quick 事件处理之信号与槽 欢迎访问我的博客:http://blog.csdn.net/foruok
按照你的方法在TouchBegin 事件时增加了
event->accept();
但是后面的TouchUpdate和TouchEnd事件,还是不能进入。
黑暗中的影子 2014-06-13
  • 打赏
  • 举报
回复
引用 1 楼 foruok 的回复:
case QEvent::TouchBegin:
        break;
这里的代码,收到TouchBegin 事件时一定要 accept 一下。 欢迎给我投票:Qt on Android: Qt Quick 事件处理之信号与槽 欢迎访问我的博客:http://blog.csdn.net/foruok
我发现TouchBegin事件能进入,然后在里面我增加了
event->accept();
但是TouchUpdate和TouchEnd事件,我还是不能调用。
foruok 2014-06-13
  • 打赏
  • 举报
回复
case QEvent::TouchBegin:
        break;
这里的代码,收到TouchBegin 事件时一定要 accept 一下。 欢迎给我投票:Qt on Android: Qt Quick 事件处理之信号与槽 欢迎访问我的博客:http://blog.csdn.net/foruok

16,815

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧