赞
踩
1、UI设计,存储结果为FindFileForm.ui
2、编译ui文件生成辅助ui头文件ui_FindFileForm.h
3、实现对话框界面逻辑,FindForm类
- #ifndef FIND_FILE_FORM_H
- #define FIND_FILE_FORM_H
- #pragma once
- #include "ui_FindFileForm.h"
-
- class FindFileForm:public QWidget
- {
- Q_OBJECT
- public:
- FindFileForm(QWidget* parent = 0);
- protected slots:
- void OnSearch();
- void OnBrowse();
- void OnStop();
- void OnClose();
- void OnTextChanged(const QString &);
- private:
- void ExecuteSearch(const QDir& dir,const QString& name,const QString& content);
- QStringList FindFiles(const QDir& dir,const QString& name,const QString& content);
- void ShowFiles(const QDir& dir,const QStringList& files);
- private:
- Ui_FindFileForm m_UIForm;
- bool m_Stoped;
- int m_nCOunt;
- };
- #endif //end of FIND_FILE_FORM_H

- #include "stdafx.h"
- #include "findfileform.h"
-
- FindFileForm::FindFileForm(QWidget* parent):QWidget(parent)
- {
- m_UIForm.setupUi(this);
- m_UIForm.m_StatusLabel->setText(tr("就绪"));
- m_UIForm.m_ResultLabel->setText(tr("找到0个文件"));
-
- m_UIForm.m_NameComboBox->setEditText(tr("*"));
- m_UIForm.m_NameComboBox->addItem(tr("*"));
- m_UIForm.m_DirComboBox->setEditText(QDir::currentPath());
- m_UIForm.m_DirComboBox->addItem(QDir::currentPath());
- m_UIForm.m_SensitiveCheckBox->setEnabled(false);
- m_UIForm.m_StopPushButton->setEnabled(false);
-
- connect(m_UIForm.m_StopPushButton,SIGNAL(clicked()),this,SLOT(OnStop()));
- connect(m_UIForm.m_SearchPushButton,SIGNAL(clicked()),this,SLOT(OnSearch()));
- connect(m_UIForm.m_BrowsePushButton,SIGNAL(clicked()),this,SLOT(OnBrowse()));
- connect(m_UIForm.m_ClosePushButton,SIGNAL(clicked()),this,SLOT(OnClose()));
- connect(m_UIForm.m_TxtlineEdit,SIGNAL(textChanged(const QString &)),this,SLOT(OnTextChanged(const QString &)));
-
- setLayout(m_UIForm.m_MainVerticalLayout);
- resize(500,500);
-
- m_Stoped = false;
- }
-
- void FindFileForm::OnSearch()
- {
- m_Stoped = false;
- m_nCOunt = 0;
- bool bCaseSensetive = m_UIForm.m_SensitiveCheckBox->isChecked();
- bool bSubfolder = m_UIForm.m_SubfilderCheckBox->isChecked();
- QString dir = m_UIForm.m_DirComboBox->currentText();
- QString content = m_UIForm.m_TxtlineEdit->text();
- QString name = m_UIForm.m_NameComboBox->currentText();
-
- m_UIForm.frame->setEnabled(false);
-
- m_UIForm.m_SearchPushButton->setEnabled(false);
- m_UIForm.m_StopPushButton->setEnabled(true);
- m_UIForm.m_ResultTableWidget->setRowCount(0);
-
- ExecuteSearch(QDir(dir),name,content);
-
- if(m_Stoped)
- {
- m_UIForm.m_StatusLabel->setText(tr("中止"));
- }
- else
- {
- m_UIForm.m_StatusLabel->setText(tr("就绪"));
- }
-
- m_UIForm.frame->setEnabled(true);
-
- m_UIForm.m_SearchPushButton->setEnabled(true);
- m_UIForm.m_StopPushButton->setEnabled(false);
-
- }
- void FindFileForm::OnBrowse()
- {
- QString dir = QFileDialog::getExistingDirectory(this,tr("浏览文件目录"),QDir::currentPath());
- m_UIForm.m_DirComboBox->addItem(dir);
- m_UIForm.m_DirComboBox->setCurrentIndex(m_UIForm.m_DirComboBox->currentIndex()+1);
-
- }
- void FindFileForm::OnStop()
- {
- m_Stoped = true;
- }
- void FindFileForm::OnClose()
- {
- QWidget::close();
- }
- void FindFileForm::OnTextChanged(const QString & content)
- {
- if(content.isEmpty())
- {
- m_UIForm.m_SensitiveCheckBox->setEnabled(false);
- }
- else
- {
- m_UIForm.m_SensitiveCheckBox->setEnabled(true);
- }
- }
-
- void FindFileForm::ExecuteSearch(const QDir& dir,const QString& name,const QString& content)
- {
-
- if(m_UIForm.m_SubfilderCheckBox->isChecked())
- {
- QStringList folders = dir.entryList(QDir::Dirs|QDir::NoDotAndDotDot);
- for (int i = 0 ; i < folders.size(); i++)
- {
- qApp->processEvents();
- if(m_Stoped)
- {
- break;
- }
- QString strDir = QString(tr("%1/%2")).arg(dir.absolutePath()).arg(folders[i]);
- ExecuteSearch(strDir,name,content);
- }
- }
-
- QStringList files = FindFiles(dir,name,content);
- ShowFiles(dir,files);
- m_nCOunt += files.size();
- m_UIForm.m_ResultLabel->setText(tr("找到%1个文件").arg(m_nCOunt));
- }
-
- QStringList FindFileForm::FindFiles(const QDir& dir,const QString& name,const QString& content)
- {
- QStringList files = dir.entryList(QStringList(name),QDir::Files|QDir::NoSymLinks);
- if(content.isEmpty())
- return files;
-
- Qt::CaseSensitivity sensitive = m_UIForm.m_SensitiveCheckBox->isChecked()?Qt::CaseSensitive:Qt::CaseInsensitive;
-
- QStringList findFiles;
- for (int i = 0 ; i < files.size() ; i++)
- {
- qApp->processEvents();
- if (m_Stoped)
- {
- break;
- }
- QFile file(dir.absoluteFilePath(files[i]));
- if (file.open(QIODevice::ReadOnly))
- {
- QString line;
- QTextStream instream(&file);
- while(!instream.atEnd())
- {
- if (m_Stoped)
- {
- break;
- }
-
- line = instream.readLine();
- if (line.contains(content,sensitive))
- {
- findFiles<<files[i];
- break;
- }
- }
- }
- }
-
- return findFiles;
- }
-
- void FindFileForm::ShowFiles(const QDir& dir,const QStringList& files)
- {
- for(int i = 0 ; i < files.size();i++)
- {
- QFile file(dir.absoluteFilePath(files[i]));
- QFileInfo fileInfo(file);
- QString name = fileInfo.fileName();
- qint64 sizes = fileInfo.size();
- QString time = fileInfo.lastModified().toString(tr("yyyy年yy月yy日"));
- QString permit = fileInfo.isWritable()?tr("可写"):tr("可读");
- QTableWidgetItem* pNameItem = new QTableWidgetItem(name);
- QTableWidgetItem* pPermitItem = new QTableWidgetItem(permit);
- QTableWidgetItem* pTimeItem = new QTableWidgetItem(time);
- QTableWidgetItem* pSizeItem = new QTableWidgetItem(tr("%1KB").arg(int(sizes+1023)/1024));
-
- int rowcount = m_UIForm.m_ResultTableWidget->rowCount();
- m_UIForm.m_ResultTableWidget->insertRow(rowcount);
- m_UIForm.m_ResultTableWidget->setItem(rowcount,0,pNameItem);
- m_UIForm.m_ResultTableWidget->setItem(rowcount,1,pSizeItem);
- m_UIForm.m_ResultTableWidget->setItem(rowcount,2,pTimeItem);
- m_UIForm.m_ResultTableWidget->setItem(rowcount,3,pPermitItem);
- }
- }

4、编译
findfileform.h,自动生成moc_findfileform.cpp
5、编写主函数调用
- #include "stdafx.h"
- #include "findfileform.h"
- int main(int argc, char *argv[])
- {
- QApplication app(argc, argv);
- QTextCodec::setCodecForTr(QTextCodec::codecForName("gb18030"));
- FindFileForm findForm;
- findForm.Show();
- return app.exec();
- }
6、效果图
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。