当前位置:   article > 正文

QT实现文件查找显示列表功能_qt qtableview显示文件列表

qt qtableview显示文件列表

1、UI设计,存储结果为FindFileForm.ui


2、编译ui文件生成辅助ui头文件ui_FindFileForm.h

3、实现对话框界面逻辑,FindForm类

  1. #ifndef FIND_FILE_FORM_H
  2. #define FIND_FILE_FORM_H
  3. #pragma once
  4. #include "ui_FindFileForm.h"
  5. class FindFileForm:public QWidget
  6. {
  7. Q_OBJECT
  8. public:
  9. FindFileForm(QWidget* parent = 0);
  10. protected slots:
  11. void OnSearch();
  12. void OnBrowse();
  13. void OnStop();
  14. void OnClose();
  15. void OnTextChanged(const QString &);
  16. private:
  17. void ExecuteSearch(const QDir& dir,const QString& name,const QString& content);
  18. QStringList FindFiles(const QDir& dir,const QString& name,const QString& content);
  19. void ShowFiles(const QDir& dir,const QStringList& files);
  20. private:
  21. Ui_FindFileForm m_UIForm;
  22. bool m_Stoped;
  23. int m_nCOunt;
  24. };
  25. #endif //end of FIND_FILE_FORM_H

  1. #include "stdafx.h"
  2. #include "findfileform.h"
  3. FindFileForm::FindFileForm(QWidget* parent):QWidget(parent)
  4. {
  5. m_UIForm.setupUi(this);
  6. m_UIForm.m_StatusLabel->setText(tr("就绪"));
  7. m_UIForm.m_ResultLabel->setText(tr("找到0个文件"));
  8. m_UIForm.m_NameComboBox->setEditText(tr("*"));
  9. m_UIForm.m_NameComboBox->addItem(tr("*"));
  10. m_UIForm.m_DirComboBox->setEditText(QDir::currentPath());
  11. m_UIForm.m_DirComboBox->addItem(QDir::currentPath());
  12. m_UIForm.m_SensitiveCheckBox->setEnabled(false);
  13. m_UIForm.m_StopPushButton->setEnabled(false);
  14. connect(m_UIForm.m_StopPushButton,SIGNAL(clicked()),this,SLOT(OnStop()));
  15. connect(m_UIForm.m_SearchPushButton,SIGNAL(clicked()),this,SLOT(OnSearch()));
  16. connect(m_UIForm.m_BrowsePushButton,SIGNAL(clicked()),this,SLOT(OnBrowse()));
  17. connect(m_UIForm.m_ClosePushButton,SIGNAL(clicked()),this,SLOT(OnClose()));
  18. connect(m_UIForm.m_TxtlineEdit,SIGNAL(textChanged(const QString &)),this,SLOT(OnTextChanged(const QString &)));
  19. setLayout(m_UIForm.m_MainVerticalLayout);
  20. resize(500,500);
  21. m_Stoped = false;
  22. }
  23. void FindFileForm::OnSearch()
  24. {
  25. m_Stoped = false;
  26. m_nCOunt = 0;
  27. bool bCaseSensetive = m_UIForm.m_SensitiveCheckBox->isChecked();
  28. bool bSubfolder = m_UIForm.m_SubfilderCheckBox->isChecked();
  29. QString dir = m_UIForm.m_DirComboBox->currentText();
  30. QString content = m_UIForm.m_TxtlineEdit->text();
  31. QString name = m_UIForm.m_NameComboBox->currentText();
  32. m_UIForm.frame->setEnabled(false);
  33. m_UIForm.m_SearchPushButton->setEnabled(false);
  34. m_UIForm.m_StopPushButton->setEnabled(true);
  35. m_UIForm.m_ResultTableWidget->setRowCount(0);
  36. ExecuteSearch(QDir(dir),name,content);
  37. if(m_Stoped)
  38. {
  39. m_UIForm.m_StatusLabel->setText(tr("中止"));
  40. }
  41. else
  42. {
  43. m_UIForm.m_StatusLabel->setText(tr("就绪"));
  44. }
  45. m_UIForm.frame->setEnabled(true);
  46. m_UIForm.m_SearchPushButton->setEnabled(true);
  47. m_UIForm.m_StopPushButton->setEnabled(false);
  48. }
  49. void FindFileForm::OnBrowse()
  50. {
  51. QString dir = QFileDialog::getExistingDirectory(this,tr("浏览文件目录"),QDir::currentPath());
  52. m_UIForm.m_DirComboBox->addItem(dir);
  53. m_UIForm.m_DirComboBox->setCurrentIndex(m_UIForm.m_DirComboBox->currentIndex()+1);
  54. }
  55. void FindFileForm::OnStop()
  56. {
  57. m_Stoped = true;
  58. }
  59. void FindFileForm::OnClose()
  60. {
  61. QWidget::close();
  62. }
  63. void FindFileForm::OnTextChanged(const QString & content)
  64. {
  65. if(content.isEmpty())
  66. {
  67. m_UIForm.m_SensitiveCheckBox->setEnabled(false);
  68. }
  69. else
  70. {
  71. m_UIForm.m_SensitiveCheckBox->setEnabled(true);
  72. }
  73. }
  74. void FindFileForm::ExecuteSearch(const QDir& dir,const QString& name,const QString& content)
  75. {
  76. if(m_UIForm.m_SubfilderCheckBox->isChecked())
  77. {
  78. QStringList folders = dir.entryList(QDir::Dirs|QDir::NoDotAndDotDot);
  79. for (int i = 0 ; i < folders.size(); i++)
  80. {
  81. qApp->processEvents();
  82. if(m_Stoped)
  83. {
  84. break;
  85. }
  86. QString strDir = QString(tr("%1/%2")).arg(dir.absolutePath()).arg(folders[i]);
  87. ExecuteSearch(strDir,name,content);
  88. }
  89. }
  90. QStringList files = FindFiles(dir,name,content);
  91. ShowFiles(dir,files);
  92. m_nCOunt += files.size();
  93. m_UIForm.m_ResultLabel->setText(tr("找到%1个文件").arg(m_nCOunt));
  94. }
  95. QStringList FindFileForm::FindFiles(const QDir& dir,const QString& name,const QString& content)
  96. {
  97. QStringList files = dir.entryList(QStringList(name),QDir::Files|QDir::NoSymLinks);
  98. if(content.isEmpty())
  99. return files;
  100. Qt::CaseSensitivity sensitive = m_UIForm.m_SensitiveCheckBox->isChecked()?Qt::CaseSensitive:Qt::CaseInsensitive;
  101. QStringList findFiles;
  102. for (int i = 0 ; i < files.size() ; i++)
  103. {
  104. qApp->processEvents();
  105. if (m_Stoped)
  106. {
  107. break;
  108. }
  109. QFile file(dir.absoluteFilePath(files[i]));
  110. if (file.open(QIODevice::ReadOnly))
  111. {
  112. QString line;
  113. QTextStream instream(&file);
  114. while(!instream.atEnd())
  115. {
  116. if (m_Stoped)
  117. {
  118. break;
  119. }
  120. line = instream.readLine();
  121. if (line.contains(content,sensitive))
  122. {
  123. findFiles<<files[i];
  124. break;
  125. }
  126. }
  127. }
  128. }
  129. return findFiles;
  130. }
  131. void FindFileForm::ShowFiles(const QDir& dir,const QStringList& files)
  132. {
  133. for(int i = 0 ; i < files.size();i++)
  134. {
  135. QFile file(dir.absoluteFilePath(files[i]));
  136. QFileInfo fileInfo(file);
  137. QString name = fileInfo.fileName();
  138. qint64 sizes = fileInfo.size();
  139. QString time = fileInfo.lastModified().toString(tr("yyyy年yy月yy日"));
  140. QString permit = fileInfo.isWritable()?tr("可写"):tr("可读");
  141. QTableWidgetItem* pNameItem = new QTableWidgetItem(name);
  142. QTableWidgetItem* pPermitItem = new QTableWidgetItem(permit);
  143. QTableWidgetItem* pTimeItem = new QTableWidgetItem(time);
  144. QTableWidgetItem* pSizeItem = new QTableWidgetItem(tr("%1KB").arg(int(sizes+1023)/1024));
  145. int rowcount = m_UIForm.m_ResultTableWidget->rowCount();
  146. m_UIForm.m_ResultTableWidget->insertRow(rowcount);
  147. m_UIForm.m_ResultTableWidget->setItem(rowcount,0,pNameItem);
  148. m_UIForm.m_ResultTableWidget->setItem(rowcount,1,pSizeItem);
  149. m_UIForm.m_ResultTableWidget->setItem(rowcount,2,pTimeItem);
  150. m_UIForm.m_ResultTableWidget->setItem(rowcount,3,pPermitItem);
  151. }
  152. }
4、编译  findfileform.h,自动生成moc_findfileform.cpp

5、编写主函数调用

  1. #include "stdafx.h"
  2. #include "findfileform.h"
  3. int main(int argc, char *argv[])
  4. {
  5. QApplication app(argc, argv);
  6. QTextCodec::setCodecForTr(QTextCodec::codecForName("gb18030"));
  7. FindFileForm findForm;
  8. findForm.Show();
  9. return app.exec();
  10. }
6、效果图



声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/煮酒与君饮/article/detail/764717
推荐阅读
相关标签
  

闽ICP备14008679号