使用 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)中快速显示视频?