Qt 5.3 Impossible de faire fonctionner QCompass (QSensor) sous Windows 8.1

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: