使用 Qt c++ 在 Windows Surface Pro 上获取加速度计数据?

Posted

技术标签:

【中文标题】使用 Qt c++ 在 Windows Surface Pro 上获取加速度计数据?【英文标题】:Getting Accelerometer data on windows Surface pro using Qt c++? 【发布时间】:2016-05-25 14:04:40 【问题描述】:

如何我尝试了下面的代码,但它在所有情况下都只给出了 0,0,0 值。请帮帮我!

   QAccelerometer *accmeter = new QAccelerometer();

    accmeter->start();
    QAccelerometerReading *reading = new QAccelerometerReading();

    qreal x = reading->x();
    qreal y = reading->y();
    qreal z = reading->z();

    QMessageBox *box = new QMessageBox();
    box->setText("x="+ QString::number(x)+ "\n" "y="+ QString::number(y)+ "\n" "z="+ QString::number(z)+ "\n");
    box->exec();

【问题讨论】:

【参考方案1】:

要获取加速度计数据,Qt公司建议收听信号readingChanged,因为启动传感器后没有立即可用的数据。您的代码将被缩短为类似这样,accMeter 被更改为该类的成员:

    accmeter = new QAccelerometer();
    connect(accmeter, SIGNAL(readingChanged()), this, SLOT(checkReading()));
    accmeter->start();

然后在你的类中添加一个名为checkReading的成员函数:

MyClass::checkReading() 
    qreal x = accmeter->reading()->x();
    qreal y = accmeter->reading()->y();
    qreal z = accmeter->reading()->z();
    QMessageBox *box = new QMessageBox();
    box->setText("x="+ QString::number(x)+ "\n" "y="+ QString::number(y)+ "\n" "z="+ QString::number(z)+ "\n");
    box->exec();

请注意,为了完美复制您上面的代码,您应该将disconnect(accmeter, SIGNAL(readingChanged()), this, SLOT(checkReading())); 作为最后一行附加到成员函数。

【讨论】:

感谢 user3147395 的建议,但信号 readingChanged() 似乎不会在 Windows Surface Pro 平板设备上随时触发,因此 Qmessagebox 也不会执行.我做错什么了吗,请给我建议任何解决方案,还是这是 Qt5.5 中的错误? 以上是它在 Qt 文档中的实现方式:doc.qt.io/qt-5/qsensor.html#start。确保您已在类头中添加插槽并且插槽名称没有拼写错误,因为我不认为拼写错误的插槽名称会导致编译器错误。

以上是关于使用 Qt c++ 在 Windows Surface Pro 上获取加速度计数据?的主要内容,如果未能解决你的问题,请参考以下文章

在 Windows 上将 TagLib 编译成 Qt C++ 项目

如何在 Windows 上使用 Qt c++ 从一个地理地址获取纬度/经度?

使用 Qt c++ 在 Windows Surface Pro 上获取加速度计数据?

GraphicsScene 中的 Qt GLWidget 用于从图像数据(C++、Windows)中快速显示视频?

如何使用 Visual C++ 2010 Express 从 32 位环境为 64 位 Windows 编译 Qt?

Qt 与 WinRT C++ 构建问题