2016-05-25 37 views
1

如何在Windows Surface Pro上使用Qt C++獲取加速度計數據?我嘗試了下面的代碼,但它在所有情況下只給出0,0,0值。請幫幫我!在Windows Surface Pro上使用Qt C++獲取加速度計數據?

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(); 

回答

0

要獲得加速度數據,它是由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()));作爲成員函數的最後一行。

+0

感謝user3147395,對於建議,但信號_readingChanged()_似乎不會在windows surface pro平板設備上隨時觸發,因此Qmessagebox也不會執行。我做錯了什麼,請給我建議任何解決方案,或者這是Qt5.5中的錯誤。 – user3807950

+0

以上是Qt文檔中顯示的實現方式:http://doc.qt.io/qt-5/qsensor.html#start。確保你已經在你的類標題中添加了插槽,並且沒有插槽名稱的拼寫錯誤,因爲我不相信拼錯的插槽名稱會導致編譯器錯誤。 – user3147395