2016-05-25 5 views
1

Как получить данные акселерометра на окнах Surface pro с помощью Qt C++? Я попробовал код ниже, но он дает всего 0,0,0 значений во всех сценариях. Пожалуйста, помогите мне!Получение данных акселерометра на окнах 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, так как нет данных сразу же доступны после запуска датчика. You код будет сокращен на что-то вроде этого, с 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

Благодарим пользователя3147395 за предложение, но сигнал _readingChanged() _, похоже, не срабатывает в любое время на планшетном устройстве Windows surface pro, и, следовательно, Qmessagebox также не выполняется. Я делаю что-то неправильно, пожалуйста, предложите мне какое-либо решение или это ошибка в Qt5.5.? – user3807950

+0

Выше было показано, что оно реализовано в документах Qt здесь: http://doc.qt.io/qt-5/qsensor.html#start. Убедитесь, что вы добавили слот в свой заголовок класса, и нет неправильного написания имени слота, так как я не считаю, что имя слота с ошибкой приводит к ошибке компилятора. – user3147395