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数组即可。




浙公网安备 33010602011771号