0

我正在尝试为针对 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)?欢迎任何意见。

[转自qt-project.org。]

4

2 回答 2

1

你的语法正确吗?编译错误似乎加强了teukkam一点......替换时会发生什么

  static_cast<QTouchEvent *>(event)->touchPoints()

  (dynamic_cast<QTouchEvent *>(event))->touchPoints()

注意括号...

于 2012-03-21T09:31:38.690 回答
1

您的语法是 100% 正确的。看看这个例子: http: //www.developer.nokia.com/Community/Wiki/Painting_in_Qt

我猜发生的是QTouchEvent::touchPoints()返回一个足够大的列表,它会溢出你的堆栈。尝试增加应用程序的堆栈大小。

于 2012-03-21T10:27:11.997 回答