头文件: findfileform.h#ifndef FINDFILEFORM_H
#define FINDFILEFORM_H
#include <QtGui/QWidget>
#include "ui_findfileform.h"
#include <QDir>
class findfileform : public QWidget,public Ui_FindFileForm
{
Q_OBJECT
public:
findfileform(QWidget *parent = 0, Qt::WFlags flags = 0);
~findfileform();
private:
Ui::FindFileForm ui;
QStringList findFiles(const QDir&,const QString&,const QString&);//文件的查找并返回符合条件的文件列表
void showFiles(const QDir&,const QStringList&);
void tranvFolder(const QDir&,const QString&,const QString&);//递归函数,实现对文件的递归查找
bool m_bStoped;//判断用户是否点击了停止按钮,如果单击了为true,否则为false
bool m_bSubfolder;//子文件夹,选中true,否则false
bool m_bSensitive;//区分大小写,选中为true,否则为false
int m_nCount;//查找文件的个数
private slots:
void browse();//浏览browse
void find();
void stop();
void doTxtChange(const QString&);
};
#endif // FINDFILEFORM_H
实现文件: findfileform.cpp
#include "findfileform.h"
#include <QtGui>
findfileform::findfileform(QWidget *parent, Qt::WFlags flags)
: QWidget(parent, flags),m_bStoped(false),m_nCount(0)
{
ui.setupUi(this);
ui.statusLabel->setText(tr("就绪"));//左下角
ui.resultLabel->setText(tr("找到0个文件"));//右下角
ui.nameComboBox->setEditText("*");//名为后边的
ui.dirComboBox->setEditText(QDir::currentPath());//应用程序所在的目录的绝对路径
ui.dirComboBox->addItem(QDir::currentPath());
ui.sensitiveCheckBox->setEnabled(false);//区分大小写复选框的初始状态为不可用(灰色)
ui.stopPushBtn->setEnabled(false);//停止查找不可用
connect(findPushBtn,SIGNAL(clicked()),this,SLOT(find()));
connect(stopPushBtn,SIGNAL(clicked()),this,SLOT(find()));
connect(closePushBtn,SIGNAL(clicked()),this,SLOT(find()));
connect(browsePushButton,SIGNAL(clicked()),this,SLOT(find()));
connect(txtLineEdit,SIGNAL(textChanged(const QString &)),this,SLOT(doTxtChange(const QString &)));
}
void findfileform::browse()//实现预览功能
{ //QFileDialog类提供了允许用户选择文件或者目录的对话框。
QString dir=QFileDialog::getExistingDirectory(this,tr("选择查找路径"),QDir::currentPath(),QFileDialog::ShowDirsOnly);
//QFileDialog::getExistingDirectory 打开一个文件对话框,返回用户选择的文件系统中存在的路径
//QDir::currentPath 获取应用程序所在的路径,初始化为文件对话框的当前目录,current当前的
//QFileDialog::ShowDirsOnly指示文件对话框只显示目录
if (!dir.isEmpty())//返回路径非空执行
{
dirComboBox->addItem(dir);//添加到查找位置下拉框
dirComboBox->setCurrentIndex(dirComboBox->currentIndex()+1);
}
}
void findfileform::find()//实现查找功能
{
frame->setEnabled(false);
//容器frame不可用,其子窗口也不可以用,防止用户查找过程中再次输入,也是在设计的时候QFrame设计的主要作用
findPushBtn->setEnabled(false);//就是findPushBtn不可以用了
stopPushBtn->setEnabled(true);//find按钮不可以用的时候,stop按钮变的可以用,牛...
statusLabel->setText(tr("正在搜索..."));//最下角statusLabel显示
resultTableWidget->setRowCount(0);
QString fileName=nameComboBox->currentText();
QString txt=txtLineEdit->text();
QString path=dirComboBox->currentText();
m_bSubfolder=subfolderCheckBox->isChecked();//包含目录那个subfolderCheckBox可以点击
m_bSensitive=sensitiveCheckBox->isChecked();//区分大小写那个sensitiveCheckBox可以点击
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 findfileform::tranvFolder(const QDir& dir,const QString& fileName,const QString& txt)
{
if (m_bSubfolder)
{