1. 程式人生 > >Qt實現遍歷資料夾和檔案目錄,並過濾和獲取檔案資訊、字尾名、字首名(三)

Qt實現遍歷資料夾和檔案目錄,並過濾和獲取檔案資訊、字尾名、字首名(三)

下面是自己的實際工作中寫的程式碼,請大家斧正

#ifndefINQUIRYDIALOG_H
#defineINQUIRYDIALOG_H
#include<QDialog>
#include<QFileDialog>
#include<QDir>
#include<QDesktopServices>
#include<QUrl>
#include<QProgressDialog>
namespaceUi{
classInquiryDialog;
}
classInquiryDialog:publicQDialog
{
Q_OBJECT
public:
explicit
InquiryDialog(QWidget*parent=0);
~InquiryDialog();
voidExecuteSearch(constQDir&dir,constQString&form,constQString&content);
QStringListFindFiles(constQDir&dir,constQString&form,constQString&content);
QStringListfindfile(constQDir&dir,constQString&content);
voidShowFiles(const
QDir&dir,constQString&form,constQStringList&files);
privateslots:
voidopenPathBtn_clicked();
voidinquiryBtn_clicked();
voidcloseInquiryBtn_clicked();
voidopenFileOfItem(introw,intcolumn);
private:
Ui::InquiryDialog*ui;
QDircurrentDir;
QStringListfiles;
intm_nCOunt;
voidcreatedTableWidget();
};
#endif
//INQUIRYDIALOG_H
#include"inquirydialog.h"
#include"ui_inquirydialog.h"
#include<QDebug>
#include<QTextDocument>
InquiryDialog::InquiryDialog(QWidget*parent):
QDialog(parent),
ui(newUi::InquiryDialog)
{
ui->setupUi(this);
createdTableWidget();
connect(ui->openPathBtn,SIGNAL(clicked()),this,SLOT(openPathBtn_clicked()));
connect(ui->inquiryBtn,SIGNAL(clicked()),this,SLOT(inquiryBtn_clicked()));
connect(ui->closeInquiryBtn,SIGNAL(clicked()),this,SLOT(closeInquiryBtn_clicked()));
QStringcurrentPath;
QDirdir;
currentPath=dir.currentPath();
qDebug()<<"path"<<currentPath;
ui->pathBox->addItem(currentPath);
}
InquiryDialog::~InquiryDialog()
{
deleteui;
}
voidInquiryDialog::createdTableWidget()
{
ui->m_TxtlineEdit->setPlaceholderText("檔名字首或字尾");
ui->inquiryWidget->setFocus();
ui->foundLabel->setText(tr("找到0個檔案"));
ui->inquiryWidget->horizontalHeader()->setResizeMode(0,QHeaderView::ResizeToContents);
ui->inquiryWidget->horizontalHeader()->setResizeMode(1,QHeaderView::Stretch);
ui->inquiryWidget->horizontalHeader()->setResizeMode(2,QHeaderView::ResizeToContents);
connect(ui->inquiryWidget,SIGNAL(cellActivated(int,int)),this,SLOT(openFileOfItem(int,int)));
}
voidInquiryDialog::openFileOfItem(introw,int)
{
QTableWidgetItem*item=ui->inquiryWidget->item(row,0);
QDesktopServices::openUrl(QUrl::fromLocalFile(currentDir.absoluteFilePath(item->text())));
}
voidInquiryDialog::openPathBtn_clicked()
{
QStringdir=QFileDialog::getExistingDirectory(this,tr("開啟檔案"),QDir::currentPath());
if(!dir.isEmpty())
{
if(ui->pathBox->findText(dir)==-1)
ui->pathBox->addItem(dir);
ui->pathBox->setCurrentIndex(ui->pathBox->findText(dir));
}
}
voidInquiryDialog::inquiryBtn_clicked()
{
ui->inquiryWidget->setRowCount(0);
m_nCOunt=0;
ui->m_txtBox->isChecked();
QStringdir=ui->pathBox->currentText();
QStringcontent=ui->m_TxtlineEdit->text();
QStringform=ui->formBox->currentText();
ExecuteSearch(QDir(dir),form,content);
}
voidInquiryDialog::ExecuteSearch(constQDir&dir,constQString&form,constQString&content)
{
if(ui->m_txtBox->isChecked())
{
QStringListfolders=dir.entryList(QDir::Dirs|QDir::NoDotAndDotDot);
for(inti=0;i<folders.size();i++)
{
qApp->processEvents();
QStringstrDir=QString(tr("%1/%2")).arg(dir.absolutePath()).arg(folders[i]);
ExecuteSearch(strDir,form,content);
}
}
QStringListfiles=FindFiles(dir,form,content);
ShowFiles(dir,form,files);
m_nCOunt+=files.size();
ui->foundLabel->setText(tr("找到%1個檔案").arg(m_nCOunt));
}
QStringListInquiryDialog::FindFiles(constQDir&dir,constQString&form,constQString&content)
{
files=dir.entryList(QStringList(form),QDir::Files|QDir::NoSymLinks);
QStringListfilesList;
if(content.isEmpty())
{
returnfiles;
}
filesList=findfile(dir,content);
returnfilesList;
}
QStringListInquiryDialog::findfile(constQDir&dir,constQString&content)
{
QStringListfindFiles;
QStringstrSffix;
QStringstrBaseName;
QStringstr;
for(inti=0;i<files.size();i++)
{
qApp->processEvents();
QFilefile(dir.absoluteFilePath(files[i]));
QFileInfofileInfo(file);
strSffix=fileInfo.suffix();
strBaseName=fileInfo.baseName();
//qDebug()<<"strSffix"<<strSffix<<"**********";
qDebug()<<"strBaseName"<<strBaseName<<"****";
if((content==strSffix)||(content==fileInfo.baseName()))
{
if(file.open(QIODevice::ReadOnly))
{
QStringline;
QTextStreaminstream(&file);
while(!instream.atEnd())
{
line=instream.readLine();
findFiles<<files[i];
break;
}
}
}
//else
{
//for(intk=0;k<strBaseName.length();k++)
//{
//str.append(strBaseName.at(k));
//if(content==strBaseName.at(k)||content==str)
//{
//if(file.open(QIODevice::ReadOnly))
//{
//QStringline;
//QTextStreaminstream(&file);
//while(!instream.atEnd())
//{
//line=instream.readLine();
//findFiles<<files[i];
//break;
//}
//}
//break;
//}
//}
}
}
returnfindFiles;
}
voidInquiryDialog::ShowFiles(constQDir&dir,constQString&form,constQStringList&files)
{
for(inti=0;i<files.size();i++)
{
QStringpermit;
QFilefile(dir.absoluteFilePath(files[i]));
qint64size=QFileInfo(file).size();
QFileInfofileInfo(file);
QStringtime=fileInfo.lastModified().toString("yyyy/MM/ddhh:mm:ss");
if(fileInfo.isWritable())
{
permit="可寫";
}
elseif(fileInfo.isReadable())
{
permit="可讀";
}
QTableWidgetItem*pTimeItem=newQTableWidgetItem(time);
QTableWidgetItem*pPermitItem=newQTableWidgetItem(permit);
QTableWidgetItem*fileNameItem=newQTableWidgetItem(files[i]);
fileNameItem->setFlags(fileNameItem->flags()^Qt::ItemIsEditable);
QTableWidgetItem*sizeItem=newQTableWidgetItem(tr("%1KB")
.arg(int((size+1023)/1024)));
//sizeItem->setTextAlignment(Qt::AlignRight|Qt::AlignVCenter);//設定左對齊屬性
sizeItem->setFlags(sizeItem->flags()^Qt::ItemIsEditable);
introw=ui->inquiryWidget->rowCount();
ui->inquiryWidget->insertRow(row);
ui->inquiryWidget->setItem(row,0,fileNameItem);
ui->inquiryWidget->setItem(row,1,sizeItem);
ui->inquiryWidget->setItem(row,2,pTimeItem);
ui->inquiryWidget->setItem(row,3,pPermitItem);
}
}
voidInquiryDialog::closeInquiryBtn_clicked()
{
close();
}

下面是執行圖