Qt学习例子7——fileaccess

这篇博客通过Qt库展示了如何进行文本文件的读写操作,包括使用特定的类和方法来创建、读取、修改及删除文件。示例代码包含在filewidgets.h、filewidgets.cpp和main.cpp文件中,程序运行能够实现对文件的有效访问和管理。

文本文件的读写

 

//filewidgets.h

 

#ifndef FILELISTWIDGET_H
#define FILELISTWIDGET_H
#include <QWidget>
#include <QFile>
#include <QPushButton>
#include <QLineEdit>
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QTextEdit>
class FileListWidget : public QWidget
{
    Q_OBJECT
public:
    explicit FileListWidget(QWidget *parent = 0);
private:
    QFile *m_file;
    QPushButton *m_btnSave;
    QPushButton *m_btnLoad;
    QTextEdit *m_txtedit;
signals:
public slots:
    void saveClicked();
    void loadClicked();
};
#endif // FILELISTWIDGET_H

 

//filewidgets.cpp

 

#include "filelistwidget.h"
#include <QTextStream>
FileListWidget::FileListWidget(QWidget *parent) :
    QWidget(parent)
  ,m_file(new QFile("listitems.txt"))
  ,m_btnSave(new QPushButton("Save"))
  ,m_btnLoad(new QPushButton("Load"))
  ,m_txtedit(new QTextEdit)
{
    QVBoxLayout *layoutAll=new QVBoxLayout;
    QHBoxLayout *bottom=new QHBoxLayout;
    bottom->addWidget(m_btnSave);
    bottom->addWidget(new QLineEdit("listitems.txt"));
    bottom->addWidget(m_btnLoad);
    layoutAll->addWidget(m_txtedit);
    layoutAll->addLayout(bottom);
    setLayout(layoutAll);
    connect(m_btnLoad,SIGNAL(clicked()),this,SLOT(loadClicked()));
    connect(m_btnSave,SIGNAL(clicked()),this,SLOT(saveClicked()));
}
void FileListWidget::saveClicked()
{
    if(!m_file->open(QIODevice::WriteOnly))//|QIODevice::Append
    {
        qDebug("Writing Error!");
        return;
    }
    else
    {
        QString content;
        content=m_txtedit->toPlainText();
        QTextStream *out=new QTextStream(m_file);
        *out<<content;
    }
    m_file->close();
}
void FileListWidget::loadClicked()
{
    m_file->open(QIODevice::ReadOnly);//|QIODevice::Text
    QTextStream *in=new QTextStream(m_file);
    QString temp(""),line;
    QStringList list;
    line=in->readLine();
    list<<line;
    temp=temp+line+"/n";
//   while(!m_file->atEnd())        //meet '/n' return eof
    while(line!=NULL)
    {
      line=in->readLine();
      temp=temp+line+"/n";
      list<<line;
    }
    m_txtedit->setPlainText(temp);
    m_file->close();
    // STL 风格的
    QStringList::const_iterator constIterator;
    for (constIterator = list.constBegin(); constIterator != list.constEnd();++constIterator)
        qDebug("Item: %s", (*constIterator).toLocal8Bit().constData());
 
    delete in;
}

 

//main.cpp

 

#include <QApplication>
#include "filelistwidget.h"
int main(int argc, char *argv[])
{
  QApplication a(argc, argv);
  FileListWidget *dlg=new FileListWidget;
  dlg->show();
  return a.exec();
}

 

 

程序运行结果:

Qt学习例子7鈥斺攆ileaccess

### QT 中实现 I2C 通信协议 在 Linux 应用层使用 I2C 总线与外设芯片通信可以通过特定文件操作来完成。对于 Qt 开发环境而言,I2C 的读写通常借助于底层的 C/C++ 函数库来进行处理[^5]。 #### 创建 I2C 设备对象并打开设备 为了能够利用 Qt 进行 I2C 操作,首先需要创建一个表示 I2C 设备的对象,并通过指定路径 `/dev/i2c-X` 来打开对应的 I2C 设备,其中 `X` 是指编号: ```cpp #include <fcntl.h> #include <sys/ioctl.h> #include <linux/i2c-dev.h> int file; char *filename = "/dev/i2c-1"; // 更改此值以匹配您的硬件设置 if ((file = open(filename, O_RDWR)) < 0) { perror("Failed to open the bus."); } ``` 上述代码片段展示了如何初始化 I2C 接口连接过程的一部分。 #### 设置目标地址并与从机建立联系 一旦成功打开了 I2C 设备,则需调用 `ioctl()` 函数设定要访问的目标器件地址(即从机地址)。这一步骤非常重要,因为只有当主机知道它想要交流的具体外围设备之后才能发送命令或接收数据。 ```cpp int addr = 0x68; // 要更改为您使用的具体传感器或其他组件的实际地址 if (ioctl(file, I2C_SLAVE, addr) < 0) { perror("Failed to acquire bus access and/or talk to slave.\n"); } ``` 这段程序说明了怎样配置选定的 I2C 设备以便后续的数据交换活动得以顺利开展。 #### 数据传输:读取/写入寄存器 最后,在完成了前面两步准备工作以后就可以执行真正的数据交互动作——向指定位置写入指令或是从中获取所需的信息。这里给出了一种简单的方法用于演示目的;实际应用场景下可能还需要考虑更多细节因素如错误检测机制等。 ```cpp // 写入单字节到寄存器 unsigned char reg = 0x07; write(file, &reg , 1); // 或者读取多个连续寄存器的内容 __u8 buffer[10]; read(file, buffer, sizeof(buffer)); for(int i=0;i<sizeof(buffer);i++){ printf("%d ",buffer[i]); } close(file); ``` 这些例子解释了基本的 I2C 读写流程,适用于大多数情况下的嵌入式系统开发工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值