使用Qt获取物理设备传感器输出

时间:2014-06-16 15:51:54

标签: android c++ qt

我尝试使用Qt Creator 5.1.1为Android开发程序,可以输出物理设备的三个传感器(QAccelerometer,Qtilt,Qmagnetometer)(HTC One x) 一切都还可以,但是有一个问题,当我想在textlabel中显示输出时,输出会很快消失并且它会变为零。 这是我的MainWindow.cpp:

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);


    QTimer *timer;
    timer = new QTimer();
    connect(timer,SIGNAL(timeout()),this,SLOT(update()));
    timer->start(10);
}

MainWindow::~MainWindow()
{
    delete ui;
}


void MainWindow::update(){


//----------------------TiltSensor--------------///////
    QSensor sensor("QTiltSensor");
    sensor.start();
    QSensorReading *reading = sensor.reading();
    qreal xrotation = reading->property("xRotation").value<qreal>();
    qreal yrotation = reading->property("yRotation").value<qreal>();

//---------------QMagnetometer-------------------/////////


    QSensor sensor2("QMagnetometer");
    sensor2.start();
    QSensorReading *reading2 = sensor2.reading();
    qreal xmagnet = reading2->property("x").value<qreal>();
    qreal ymagnet = reading2->property("y").value<qreal>();
    qreal zmagnet = reading2->property("z").value<qreal>();

//----------------------QAccelerometer--------------------------/////


    QSensor sensor3("QAccelerometer");
    sensor3.start();
    QSensorReading *reading3 = sensor3.reading();
    qreal xAccel = reading3->property("x").value<qreal>();
    qreal yAccel = reading3->property("y").value<qreal>();
    qreal zAccel = reading3->property("z").value<qreal>();
//-----------------------------------------------------------------///




    {
    ui->label->setText(QString::number(xrotation));
    ui->label_2->setText(QString::number(yrotation));

    }

    {
            ui->label_10->setText(QString::number(xmagnet));
            ui->label_8->setText(QString::number(ymagnet));
            ui->label_11->setText(QString::number(zmagnet));
    }


    {
            ui->label_17->setText(QString::number(xAccel));
            ui->label_16->setText(QString::number(yAccel));
            ui->label_15->setText(QString::number(zAccel));
    }
    }

我搜索了很多并在Qt-Help中阅读了所有文档但没有得到任何结果,我甚至尝试使用readychange()信号,但它似乎并没有用。

2 个答案:

答案 0 :(得分:0)

运行传感器启动后,您需要等待。您应该在构造函数中启动传感器并将信号readingChanged连接到您的插槽。希望这有帮助

答案 1 :(得分:0)

旧帖但也许人们仍有同样的问题。 例如,将您的函数名称从update()更改为updateVals()update()是保留的,它会在不提醒您的情况下为您提供问题。