POVLED 上位机实现(2)文件浏览与读取

方法一:直接编写一个显示文件系统的功能,

文件浏览功能使用了QDir,QListWidgetItem,这两个类,能够做到在文件目录浏览文件夹内容,可以手动输入切换文件夹。

文件浏览界面我们使用了一个打开button来触发,属于会话窗口。

首先是新建一个会话窗口,

捕获

添加按键槽函数,将两个界面连接起来。

捕获

然后是添加浏览窗口主要代码段。

#include "fileSysdialog.h"
#include "ui_fileSysdialog.h"


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


    initUiDialog();
}


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


void fileSysDialog::initUiDialog()
{
    connect(ui->filePath,SIGNAL(returnPressed()),this,SLOT(slotShow()));  //将回车键与文件显示连接//双击与进入下层文件夹
    connect(ui->folder,SIGNAL(itemDoubleClicked(QListWidgetItem*)),this,SLOT(slotDirShow(QListWidgetItem*)));
    QString root = "/";
    ui->filePath->setText(root);
    QDir rootDir(root);  //设置初始文佳目录
    QStringList filesList;
    filesList <<"*";    //文件过滤方式
    QFileInfoList list = rootDir.entryInfoList(filesList); //获得文件列表信息
    showFileList(list);


}
//显示文件信息

void fileSysDialog::showFileList(QFileInfoList list)
{
    ui->folder->clear();
    for(unsigned int i = 0;i < list.count();i++)
    {
        QFileInfo fileIndex = list.at(i);
        if(fileIndex.isDir())
        {
            QIcon icon("dir.png");
            QString  fileName = fileIndex.fileName();
            QListWidgetItem *tmp = new QListWidgetItem(icon,fileName);
            ui->folder->addItem(tmp);
        }
        else if(fileIndex.isFile())
        {
            QIcon icon("file.png");
            QString fileName = fileIndex.fileName();
            QListWidgetItem *tmp = new QListWidgetItem(icon,fileName);
            ui->folder->addItem(tmp);
        }
    }
}


void fileSysDialog::slotShow()
{
    QDir dir(ui->filePath->text());
    QStringList filesList;
    filesList <<"*";    //目录有关 隐含文件名
    QFileInfoList list = dir.entryInfoList(filesList,QDir::AllEntries,QDir::DirsFirst);
    showFileList(list);
}
void fileSysDialog::slotDirShow(QListWidgetItem *item)
{
              //显示下层文件内容

    QString str = item->text();  //下层文件目录
    QDir dir;
    dir.setPath(ui->filePath->text());
    //dir.cd(str);
    dir.cd(str);
    ui->filePath->setText(dir.absolutePath());  //文件目录绝对地址
    slotShow();
}


/*
void fileSysDialog::on_filePath_returnPressed()
{
    QStringList filesList;
    filesList <<"*";    //目录有关 隐含文件名
    QFileInfoList list = dir.entryInfoList(filesList,QDir::AllEntries,QDir::DirsFirst);
    showFileList(list);
}


void fileSysDialog::on_folder_itemDoubleClicked(QListWidgetItem *item)
{
    QString str = item->text();
    QDir dir;
    dir.setPath(ui->filePath->text());
    dir.cd(str);
    dir.cd(str);
    ui->filePath->setText(dir.absolutePath());
    slotShow(dir);
}
*/
#ifndef FILESYSDIALOG_H
#define FILESYSDIALOG_H


#include <QDialog>
#include <QString>
#include <QDir>
#include <QListWidgetItem>


namespace Ui {
class fileSysDialog;
}


class fileSysDialog : public QDialog
{
    Q_OBJECT


public:
    explicit fileSysDialog(QWidget *parent = nullptr);
    ~fileSysDialog();


    void initUiDialog();
    void showFileList(QFileInfoList list);


private slots:
    //void on_filePath_returnPressed();


    //void on_folder_itemDoubleClicked(QListWidgetItem *item);


    void slotShow();
    void slotDirShow(QListWidgetItem *item);
private:
    Ui::fileSysDialog *ui;
};


#endif // FILESYSDIALOG_H

方法二:通过自带组件调用系统文件系统获得文件

植入头文件

#include <QFileDialog>

#include <QString>
#include <QVector>

定义全局数组

QVector <uint> displayCode;

”打开文件“文件按钮下添加槽函数

void MainWindow::on_OpenFiles_clicked() 
{
    fileName = QFileDialog::getOpenFileName(this,"打开","/","files(*txt)");
    ui->FilesValue->setText(fileName);
    ui->DeciceConnect->setEnabled(true);        //获得文件位置信息


    QFile data(fileName);
    if(!data.open(QIODevice::ReadOnly|QIODevice::Text))
    {
        qDebug() << "Open failed.";
    }
    QTextStream in(&data);                       //流打开文件


    QString lineStr;
    unsigned int codeCN;
    unsigned int i;
    uint disCode;
    while(!in.atEnd())
    {
        lineStr = in.readLine();                 //读取文件一行 为字符串
        qDebug() << lineStr;
        codeCN = lineStr.length()/5;             //统计数值数
        qDebug() << lineStr.length();
        for(i = 0;i < codeCN;i ++)              //提取十六进制字符串 转换为数值
        {
            qDebug() << lineStr.section(',',i,i);
            disCode = lineStr.section(',',i,i).toUInt(NULL, 16);;
            qDebug() << disCode;
            displayCode.append(disCode);        //将文本内容转换成数值并存储到数组中
            qDebug() << displayCode;
        }


    }
    data.close();
}

效果图如下

捕获

使用文件中的内容直接调用displayCode数组即可。

posted @ 2021-04-10 22:58  steven_lg  阅读(279)  评论(0)    收藏  举报