Je ne peux pas faire fonctionner les capteurs sur mon Asus Transformer T100.
Le magnétomètre et la boussole ne démarrent pas et j’ai une fausse valeur de l’accéléromètre (toujours x = 0, y = 9,8, z = 0)
J’obtiens toujours le même résultat, même avec mon ordinateur portable:
premier textEdit:
Initialisation... QAccelerometer is connected to backend... QAccelerometer isActive... Attente des données capteur...
Deuxième textEdit:
ven. juin 6 14:56:41 2014 Acceleration: x = 0 y = 9.8 z = 0 Compass: UNAVAILABLE QMagnetometer: UNAVAILABLE
Et ce code:
QList sensorList = QSensor::sensorTypes(); ui->init->append("Sensor list length: " + QSsortingng::number(sensorList.size()).toUtf8()); foreach( QByteArray sensorName, sensorList ) { ui->init->append("Sensor: " + sensorName); }
Donnez-moi :
Sensor: QAmbientLightSensor Sensor: QAccelerometer Sensor: QTiltSensor Sensor: QOrientationSensor Sensor: QRotationSensor
Où est QCompass? Qmagnétomètre? Pourquoi QAccelerometer est-il truqué? : ‘(
Voici mon code de test simplifié, uniquement avec QCompass:
entête:
#ifndef MAINWINDOW_H #define MAINWINDOW_H #include #include #include namespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); public slots: void update(); void error(int); private: Ui::MainWindow *ui; QCompass *compass; QCompassReading *compass_reading; }; #endif // MAINWINDOW_H
code:
#include #include "mainwindow.h" #include "ui_mainwindow.h" #include MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); ui->init->setText("Initialisation..."); compass = new QCompass(this); connect(compass, SIGNAL(readingChanged()), this, SLOT(update())); connect(compass, SIGNAL(sensorError(int)), this, SLOT(error(int))); compass->setDataRate(1); compass->start(); if (compass->isBusy()) { ui->init->append("QCompass is busy..."); } if(compass->isConnectedToBackend()) { ui->init->append("QCompass is connected to backend..."); } if(compass->isActive()) { ui->init->append("QCompass isActive..."); } ui->init->append("Waiting for sensors..."); } MainWindow::~MainWindow() { delete compass; delete ui; } void MainWindow::update() { QSsortingng text_compass; ui->textEdit->clear(); accel_reading = accel->reading(); compass_reading = compass->reading(); if(compass_reading != 0) { text_compass = QDateTime::currentDateTime().toSsortingng() + + "\nCompass: azimuth = " + QSsortingng::number(compass_reading->azimuth()); + "\ncalibration level = " + QSsortingng::number(compass_reading->calibrationLevel()); ui->textEdit->append(text_compass); } else { text_compass = "\nCompass: UNAVAILABLE"; ui->textEdit->append(text_compass); } } void MainWindow::error(int erreur) { QMessageBox::critical(this, "Erreur", "Erreur num : " + QSsortingng::number(erreur).toUtf8()); }
La solution pour le moment est de pirater le plugin Winrt Sensor et de le reconstruire. (Le backend de capteurs pour WinRT fonctionne pour Windows 7/8).
Commencez par cloner le plugin, ou récupérez le code source de Qt.
puis ouvrez src / plugins / capteurs / capteurs.pro et ajoutez ces lignes:
win32-msvc2012|win32-msvc2013 { isEmpty(SENSORS_PLUGINS): SENSORS_PLUGINS = winrt generic dummy } winrt|win32-msvc2012|win32-msvc2013 { isEmpty(SENSORS_PLUGINS)|contains(SENSORS_PLUGINS, winrt):SUBDIRS += winrt }
RETIREZ cette ligne:
isEmpty(SENSORS_PLUGINS)|contains(SENSORS_PLUGINS, winrt):winrt:SUBDIRS += winrt
Ensuite, ouvrez src / plugins / sensors / winrt / winrt.pro et ajoutez les lignes suivantes:
win32-msvc2012|win32-msvc2013: LIBS += -lruntimeobject
Et enfin, lancez qmake, make / nmake, make / nmake install (demandez à Google plus d’informations sur la construction).
IMPORTANT: le processus d’exécution doit partir du répertoire où se trouve le fichier qtsensors.pro (par exemple, C: \ Qt \ 5.4 \ Src \ qtsensors).
Pour obtenir plus d’informations, et suivez: