【发布时间】:2012-03-21 08:33:16
【问题描述】:
我正在尝试为我的针对 N8(和 C7)的程序获取触摸输入,但我无法使用 QTouchEvent::touchPoints() 创建用于保持接触点的 QList。程序崩溃并显示以下行:Thread has crashed: A data abort exception has occurred accessing 0xee
重载的事件函数如下:
bool GLWindow::event(QEvent *event)
{
switch ( event->type() ) {
case QEvent::TouchBegin: {
QList<QTouchEvent::TouchPoint> touchBeginPoints =
static_cast<QTouchEvent *>(event)->touchPoints();
foreach (const QTouchEvent::TouchPoint &touchBeginPoint, touchBeginPoints)
{
float touchBeginX = touchBeginPoint.pos().x();
float touchBeginY = touchBeginPoint.pos().y();
qDebug() << "touchBeginPoint := " << touchBeginX << ", " << touchBeginY;
}
break;
}
case QEvent::TouchUpdate: {
// same as touch begin: getting touch point
break;
}
case QEvent::TouchEnd: {
// same as touch begin: getting touch point
break;
}
default: {
qDebug() << "Goodbye";
return true;
}
}
return true;
}
现在,
- 我以前从未使用过容器。但是在程序的另一部分创建和使用 QList 可以正常工作。我应该在我的 .pro 文件中包含一些内容吗? (大多数问题似乎都与我有关!)
- 我阅读了(一点点)关于 Qt 和 Symbian 中的异常的信息,但我无法了解其中的大部分内容。但除了 3D 对象的纹理之外,我没有做任何基于网络或资源的 i/o 或操作。运行程序时的内存分配是否可能会产生一些问题?
基本上我只是想打印接触点。但我不知道为什么我不能创建一个 QList。代码编译得很好。我尽了最大努力(不成功),但是有没有其他方法可以获取触摸点的屏幕坐标(不需要 QList)?欢迎任何cmets。
【问题讨论】:
-
只是一种预感,但是如果您将 static_cast 替换为 qobject_cast 会发生什么?
-
@teukkam 事件不是对象...也许是 dynamic_cast...
-
@teukkam 导致错误:
no matching function for call to 'qobject_cast(QEvent*&)'。我也尝试了 dynamic_cast,它给出了相同的结果。谢谢。 -
你是对的@UmNyobe 对那个错误感到抱歉。重点是,如果我没记错的话,数据中止是 Symbian 的一种神秘方式,即在某处取消引用了一个空指针(或其他任意指针)。
-
我越来越确信在这个代码块中没有什么会导致崩溃。您是否尝试在案例块的顶部放置一个 qDebug,以查看它是否在创建 QList 之前已经崩溃?