下面是自己的实际工作中写的代码,请大家斧正
#ifndef INQUIRYDIALOG_H #define INQUIRYDIALOG_H #include <QDialog> #include <QFileDialog> #include <QDir> #include <QDesktopServices> #include <QUrl> #include <QProgressDialog> namespace Ui { class InquiryDialog; } class InquiryDialog : public QDialog { Q_OBJECT public: explicit InquiryDialog(QWidget *parent = 0); ~InquiryDialog(); void ExecuteSearch(const QDir& dir,const QString& form,const QString& content); QStringList FindFiles(const QDir& dir,const QString& form,const QString& content); QStringList findfile(const QDir& dir,const QString& content); void ShowFiles(const QDir& dir,const QString& form,const QStringList& files); private slots: void openPathBtn_clicked(); void inquiryBtn_clicked(); void closeInquiryBtn_clicked(); void openFileOfItem(int row, int column); private: Ui::InquiryDialog *ui; QDir currentDir; QStringList files; int m_nCOunt; void createdTableWidget(); }; #endif // INQUIRYDIALOG_H #include "inquirydialog.h" #include "ui_inquirydialog.h" #include <QDebug> #include <QTextDocument> InquiryDialog::InquiryDialog(QWidget *parent) : QDialog(parent), ui(new Ui::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())); QString currentPath; QDir dir; currentPath = dir.currentPath(); qDebug()<<"path"<<currentPath; ui->pathBox->addItem(currentPath); } InquiryDialog::~InquiryDialog() { delete ui; } void InquiryDialog::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))); } void InquiryDialog::openFileOfItem(int row, int) { QTableWidgetItem *item = ui->inquiryWidget->item(row, 0); QDesktopServices::openUrl(QUrl::fromLocalFile(currentDir.absoluteFilePath(item->text()))); } void InquiryDialog::openPathBtn_clicked() { QString dir = 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)); } } void InquiryDialog::inquiryBtn_clicked() { ui->inquiryWidget->setRowCount(0); m_nCOunt = 0; ui->m_txtBox->isChecked(); QString dir = ui->pathBox->currentText(); QString content = ui->m_TxtlineEdit->text(); QString form = ui->formBox->currentText(); ExecuteSearch(QDir(dir),form,content); } void InquiryDialog::ExecuteSearch(const QDir& dir,const QString& form,const QString& content) { if(ui->m_txtBox->isChecked()) { QStringList folders = dir.entryList(QDir::Dirs|QDir::NoDotAndDotDot); for (int i = 0 ; i < folders.size(); i++) { qApp->processEvents(); QString strDir = QString(tr("%1/%2")).arg(dir.absolutePath()).arg(folders[i]); ExecuteSearch(strDir,form,content); } } QStringList files = FindFiles(dir,form,content); ShowFiles(dir,form,files); m_nCOunt += files.size(); ui->foundLabel->setText(tr("找到%1个文件").arg(m_nCOunt)); } QStringList InquiryDialog::FindFiles(const QDir& dir,const QString& form,const QString& content) { files = dir.entryList(QStringList(form),QDir::Files|QDir::NoSymLinks); QStringList filesList; if(content.isEmpty()) { return files; } filesList = findfile(dir,content); return filesList; } QStringList InquiryDialog::findfile(const QDir& dir,const QString& content) { QStringList findFiles; QString strSffix; QString strBaseName; QString str; for (int i = 0 ; i < files.size() ; i++) { qApp->processEvents(); QFile file(dir.absoluteFilePath(files[i])); QFileInfo fileInfo(file); strSffix = fileInfo.suffix(); strBaseName = fileInfo.baseName(); // qDebug()<<"strSffix"<<strSffix<<"**********"; qDebug()<<"strBaseName"<<strBaseName<<"****"; if((content == strSffix) || (content == fileInfo.baseName())) { if (file.open(QIODevice::ReadOnly)) { QString line; QTextStream instream(&file); while(!instream.atEnd()) { line = instream.readLine(); findFiles<<files[i]; break; } } } // else { // for(int k = 0;k < strBaseName.length();k++) // { // str.append(strBaseName.at(k)); // if (content == strBaseName.at(k) || content == str) // { // if (file.open(QIODevice::ReadOnly)) // { // QString line; // QTextStream instream(&file); // while(!instream.atEnd()) // { // line = instream.readLine(); // findFiles<<files[i]; // break; // } // } // break; // } // } } } return findFiles; } void InquiryDialog::ShowFiles(const QDir& dir,const QString& form,const QStringList& files) { for(int i = 0 ; i < files.size();i++) { QString permit; QFile file(dir.absoluteFilePath(files[i])); qint64 size = QFileInfo(file).size(); QFileInfo fileInfo(file); QString time = fileInfo.lastModified().toString("yyyy/MM/dd hh:mm:ss"); if(fileInfo.isWritable()) { permit = "可写"; } else if(fileInfo.isReadable()) { permit = "可读"; } QTableWidgetItem* pTimeItem = new QTableWidgetItem(time); QTableWidgetItem* pPermitItem = new QTableWidgetItem(permit); QTableWidgetItem *fileNameItem = new QTableWidgetItem(files[i]); fileNameItem->setFlags(fileNameItem->flags() ^ Qt::ItemIsEditable); QTableWidgetItem *sizeItem = new QTableWidgetItem(tr("%1 KB") .arg(int((size + 1023) / 1024))); // sizeItem->setTextAlignment(Qt::AlignRight | Qt::AlignVCenter);//设置左对齐属性 sizeItem->setFlags(sizeItem->flags() ^ Qt::ItemIsEditable); int row = 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); } } void InquiryDialog::closeInquiryBtn_clicked() { close(); }下面是运行图
