2016-05-25 10 views
1

Wie kann ich Accelerometer Daten auf Windows Surface Pro mit Qt C++ bekommen? Ich habe den folgenden Code ausprobiert, aber es gibt nur 0,0,0 Werte in allen Szenarien. Bitte hilf mir!Accelerometer Daten auf Windows Surface Pro mit 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(); 

Antwort

0

die Beschleunigungssensordaten zu erhalten, wird es von der Qt-Unternehmen empfohlen, das Signal readingChanged, zu hören, da keine Daten nach dem Start der Sensor sofort verfügbar ist. Sie Code würde so etwas verkürzt werden, mit accMeter verändert wird ein Mitglied der Klasse zu sein:

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

und dann eine Memberfunktion der Klasse checkReading genannt hinzu:

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

Beachten Sie, dass Um den Code, den Sie oben hatten, perfekt zu replizieren, sollten Sie disconnect(accmeter, SIGNAL(readingChanged()), this, SLOT(checkReading())); als letzte Zeile an die Elementfunktion anhängen.

+0

Danke user3147395, für den Vorschlag, aber das Signal _readingChanged() _ scheint nicht auf Windows-Oberfläche pro Tablet-Gerät zu schießen, und damit die Qmessagebox auch nicht ausführen. Mache ich etwas falsch, bitte schlagen Sie mir irgendeine Lösung vor oder ist das ein Fehler in Qt5.5? – user3807950

+0

Das obige ist die Art und Weise, wie es in den Qt-Dokumenten gezeigt wurde: http://doc.qt.io/qt-5/qsensor.org#start. Stellen Sie sicher, dass Sie den Slot in Ihrem Klassenheader hinzugefügt haben und der Name des Slots nicht falsch geschrieben wird, da ein falsch geschriebener Slot-Name nicht zu einem Compiler-Fehler führt. – user3147395