1、使用 QFile 这个类直接访问文件
设定file路径——打开文件——读写文件——关闭文件;
参考正点Qt开发第15章led控制
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
#include <QFile>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
#if __arm__
system("echo none > /sys/class/leds/sys-led/trigger");
#endif
//1、使用file直接访问led;
QFile file;
file.setFileName("/sys/devices/platform/leds/leds/sys-led/brightness");
if(!file.exists())
ui->pushButton->setText("no file");
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_clicked()
{
//2、打开文件;
if(!file.open(QIODevice::ReadWrite))
{
qDebug()<<file.errorString();
return;
}
//3、读写文件;
QTextStream in(&file);
QString state = in.readLine();
qDebug() << "read buf:" << state <<endl;
QByteArray buf[2]= {"0","1"};
if(state == "1")//此时状态为关闭;
{
file.write(buf[0]);
ui->pushButton->setText("led on");
}
if(state == "0")
{
ui->pushButton->setText("led off");
file.write(buf[1]);
}
//4、关闭文件
file.close();
}
2、open()方法访问数据
确定文件路径——打开文件——读文件——关闭文件;
与QFile的区别:这里的open是C语言提供的函数,而不是QFile类的成员函数file.open();
参考正点Qt第23章icm20608(简化)
icm20608.cpp提供数据接口
#include "icm20608.h"
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <QDebug>
Icm20608::Icm20608(QObject *parent) : QObject (parent)
{
timer = new QTimer();
#if __arm__
system("insmod /home/root/driver/icm20608/icm20608.ko");
#endif
connect(timer,SIGNAL(timeout()),this,SLOT(icm20608ReadData()));
}
Icm20608::~Icm20608(){}
void Icm20608::setCapture(bool str)
{
if(str)
timer->start(500);
else
timer->stop();
}
void Icm20608::icm20608ReadData()
{
1.确定文件路径
int fd;
char const *filename = "/dev/icm20608";
signed int databuf[7];
signed int gyro_x_adc, gyro_y_adc, gyro_z_adc;
signed int temp_adc;
float gyro_x_act, gyro_y_act, gyro_z_act;
float temp_act;
int ret = 0;
2、使用open()打开文件;
fd = open(filename,O_RDWR);
if(fd <0)
{
printf("cann't open file:%s\n",filename);
return;
}
3、read读文件;
ret = read(fd,databuf,sizeof (databuf));
if(ret == 0)
{
gyro_x_adc = databuf[0];
gyro_y_adc = databuf[1];
gyro_z_adc = databuf[2];
temp_adc = databuf[6];
gyro_x_act = (float)(gyro_x_adc)/16.4;
gyro_y_act = (float)(gyro_y_adc)/16.4;
gyro_z_act = (float)(gyro_z_adc)/16.4;
temp_act = ((float)temp_adc-25)/326.8+25;
gxdata = QString::number(gyro_x_act,'f',2);
gydata = QString::number(gyro_y_act,'f',2);
gzdata = QString::number(gyro_z_act,'f',2);
tempdata = QString::number(temp_act, 'f', 2);
}
4、关闭文件;
close(fd);
emit icm20608DataChange();
}
QString Icm20608::gxData(){return gxdata;}
QString Icm20608::gyData(){return gydata;}
QString Icm20608::gzData(){return gzdata;}
QString Icm20608::tempData(){return tempdata;}
mainwindow.cpp调用数据;
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
this->resize(800,480);
//实例化对象,方便后续调用icm20608的数据;
icm20608 = new Icm20608(this);
#if __arm__
icm20608->setCapture(true);
#endif
connect(icm20608,SIGNAL(icm20608DataChange()),this,SLOT(showData()));
}
MainWindow::~MainWindow(){delete ui;}
//调用并显示在界面;
void MainWindow::showData()
{
ui->ax->setText(icm20608->axData());
ui->ay->setText(icm20608->ayData());
ui->az->setText(icm20608->azData());
ui->gx->setText(icm20608->gxData());
ui->gy->setText(icm20608->gyData());
ui->gz->setText(icm20608->gzData());
}