Qt查找文件及文本(备忘备用)
来源:互联网 发布:供应链协同软件 编辑:程序博客网 时间:2024/05/22 04:47
//响应用户“浏览”操作的槽函数browse()
void CFindFileForm::browse(){
QString dir = QFileDialog::getExistingDirectory(
this,tr("选择查找路径"),QDir::currentPath(),
QFileDialog::ShowDirsOnly);
if(!dir.isEmpty()){
dirComboBox->addItem(dir);
dirComboBox->setCurrentIndex(dirComboBox->currentIndex()+1);
}
}
//find()槽函数响应用户单击"查找"操作
void CFindFileForm::find(){
frame->setEnabled(false);
findPushBtn->setEnabled(false);
stopPushBtn->setEnabled(true);
statusLabel->setText(tr("正在搜索..."));
resultTableWidget->setRowCount(0);
QString fileName = nameComboBox->currentText(); //查找的文件名
QString txt = txtLineEdit->text(); //查找的文本(在文件中)
QString path = dirComboBox->currentText(); //在此文件夹内查找
m_bSubFolder = subFolderCheckBox->isChecked(); //是否遍历子文件夹
m_bSensitive = sensitiveCheckBox->isChecked(); //是否区分大小写
m_nCount = 0;
m_bStoped =false;
QDir dir = QDir(path);
if(fileName.isEmpty()) //如果文件名为空,查找所有文件
fileName = "*";
tranvFolder(dir,fileName,txt); //实现真正的查找文件功能
if(m_bStoped)
statusLabel->setText(tr("已中止"));
else
statusLabel->setText(tr("就绪")); //及其后面:查找结束重置以便下次查找
findPushBtn->setEnabled(true);
stopPushBtn->setEnabled(false);
frame->setEnabled(true);
}
//真正的查找文件
void CFindFileForm::tranvFolder(const QDir&dir,
const QString&fileName,
const QString& txt){
if(m_bSubFolder){ //如果查找子文件夹,递归查找
QStringList folders;
//获取当前文件夹下的所有子文件夹列表
floders = dir.entryList(QDir::Dirs | QDir::NoDotAndDotDot);
for(int i = 0; i < folders.size(); ++i){
qApp->processEvents(); //以便程序在查找过程中可以响应用户的其他操作
if(m_bStoped)
break;
QString strDir =
QString("%1/%2").arg(dir.absolutePath())
.arg(folders[i]);
tranvFolder(strDir,fileName,txt);
}
}
QStringList files = findFiles(dir,fileName,txt); //当前目录下查找文件
showFiles(dir,files); //显示文件
m_nCount += files.size();
resultLabel->setText(tr("找到%1个文件").arg(m_nCount));
}
//对当前目录的文件查找,并返回查找到的文件列表
QStringList CFindFileForm::findFiles(const QDir &dir,
const QString &fileName,
const QString &txt){
QStringList files = dir.entryList(QStringList(fileName), //文件名字过滤器
QDir::Files | QDir::NoSymLinks);
if(txt.isEmpty()) //若没有查找文本,直接返回文件名即可,不必进入文件
return files;
QStringList foundFiles; //存放找到的文件名
Qt::CaseSensitivity sensitive = Qt::CaseInsensitive;
if(m_bSensitive) //是否区分大小写
sensitive = Qt::CaseSensitive;
for(int i = 0; i < files.size(); ++i){
qApp->processEvents();
if(m_bStoped) //查找中止
break;
QFile file(dir.absoluteFilePath(files[i])); //取绝对文件路径
if(file.open(QIODevice::ReadOnly)){ //只读方式打开文件
QString line; //存放一行文本
QTextStream in(&file); //文本流
while(!in.atEnd()){ //还没读到文件尾循环
if(m_bStoped)
break;
line = in.readLine(); //文本流对象读一行文本
if(line.contains(txt,sensitive)){ //这一行中包含有要找的文本
foundFiles<<files[i]; //加入到找到的文件列表中
break; //找到文本,终止对此文件的查找
}
}
}
}
return foundFiles;
}
//显示查找到的文件名
void CFindFileForm::showFiles(const QDir& dir,const QStringList &files){
for(int i = 0; i < files.size(); ++i){
QString strFilePath = dir.absoluteFilePath(files[i]); //取绝对路径
QFile file(strFilePath);
QFileInfo fileInfo(file); //文件信息对象
qint64 size = fileInfo.size(); //文件大小
QDateTime dateTime = fileInfo.created(); //文件创建时间
QString strDataTime = dateTime.toString(tr("yyyy MM月dd日hh::mm"));
QString strPermission; //文件权限
if(fileInfo.isWriteable()) //文件可读
strPermission = ("w");
if(fileInfo.isReadabled())
strPermission.append(" r");
if(fileInfo.isExecutable)
strPermission.append(" x");
QTableWidgetTtem *fileNameItem =
new QTableWidgetItem(strFilePath);
fileNameItem->setFlags(Qt::ItemIsEnabled);
QTableWidgetItem* sizeItem = new QTableWidgetItem(tr("%1 KB")
.arg(int((size+1023)/1024)));
sizeItem->setTextAlignment(Qt::AlignRight | Qt::AlignVCenter);
sizeItem->setFlags(Qt::ItemIsEnabled);
QTableWidgetItem* createdItem = new QTableWidgetItem(strDataTime);
QTableWidgetItem* permissionItem = new QTableWigetItem(strPermission);
int row = resultTableWidget->rowCount();
resultTableWidget->insertRow(row);
resultTableWidget->setItem(row,0,fileNameItem);
resultTableWidget->setItem(row,1,sizeItem);
resultTableWidget->setItem(row,2,createdItem);
resultTableWidget->setItem(row,3,permissionItem);
}
}
//槽函数stop()响应用户单击“停止”按钮操作
void CFindFileForm::stop(){
m_bStoped = true;
}
//槽函数doTxtChanged()响应“包含文本”LineEdit的编辑操作
void CFindFileForm::doTxtChanged(const QString& txt){
if(txt.isEmpty()) //若文本为空,大小写复选框不可用
sensitiveCheckBox->setEnabled(false);
eles
sensitiveCheckBox->setEnabled(true);
}
0 0
- Qt查找文件及文本(备忘备用)
- QT:带文件查找的文本编辑器
- Qt浅谈之五:带文件查找的文本编辑器
- Qt浅谈之带文件查找的文本编辑器
- Qt中调用OpenCV库及头文件的设置.备用
- Qt中调用OpenCV库及头文件的设置.备用
- 文件文本查找
- QT文件查找
- 七、Qt Creator实现文本查找
- 七、Qt Creator实现文本查找
- QT:利用正则表达式查找文本
- linux 按文本查找文件
- 系统文件路径解析及环境变量一览(整合备用)
- Qt关联文件查找命令
- qt备忘
- 查找文件及文件内容查找
- grep 命令查找文件中的文本字符串
- APK文件修改及编译打包备忘
- linux more 命令
- jquery那点事之animate
- linux coredump调试
- Activity的启动模式与flag详解
- rabbitmq-server 安装方法
- Qt查找文件及文本(备忘备用)
- VS2010 窗口重绘
- 30多年程序员生涯经验总结
- windows 内存管理之 Section and View
- asp.net 判断当前日期为星期几
- JAVA的构造函数与函数重载
- sql server2005安装
- 这是一个开始
- adb logcat 命令行用法