zoukankan      html  css  js  c++  java
  • 一个统计多文件单行字符串出现次数QT实现

    只保证能用,细节内存没考虑,清空功能也没调好

    count.pro

    #-------------------------------------------------
    #
    # Project created by QtCreator 2020-05-08T01:22:21
    #
    #-------------------------------------------------
    
    QT       += core gui
    
    TARGET = sitool
    TEMPLATE = app
    
    
    SOURCES += main.cpp
            sitool.cpp
    
    HEADERS  += sitool.h
    
    FORMS    += sitool.ui
    
    

    mainwindow.ui

    <?xml version="1.0" encoding="UTF-8"?>
    <ui version="4.0">
     <class>MainWindow</class>
     <widget class="QMainWindow" name="MainWindow">
      <property name="windowModality">
       <enum>Qt::WindowModal</enum>
      </property>
      <property name="geometry">
       <rect>
        <x>0</x>
        <y>0</y>
        <width>631</width>
        <height>565</height>
       </rect>
      </property>
      <property name="windowTitle">
       <string>MainWindow</string>
      </property>
      <widget class="QWidget" name="centralwidget">
       <property name="sizePolicy">
        <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
         <horstretch>0</horstretch>
         <verstretch>0</verstretch>
        </sizepolicy>
       </property>
       <layout class="QHBoxLayout" name="horizontalLayout_3">
        <item>
         <layout class="QVBoxLayout" name="verticalLayout">
          <property name="sizeConstraint">
           <enum>QLayout::SetMinAndMaxSize</enum>
          </property>
          <item>
           <layout class="QHBoxLayout" name="horizontalLayout">
            <item>
             <widget class="QLabel" name="dirpath">
              <property name="text">
               <string>查找文件夹:</string>
              </property>
             </widget>
            </item>
            <item>
             <widget class="QLineEdit" name="dirname">
              <property name="text">
               <string/>
              </property>
             </widget>
            </item>
            <item>
             <widget class="QPushButton" name="dirbtn">
              <property name="text">
               <string>打开</string>
              </property>
             </widget>
            </item>
            <item>
             <widget class="QPushButton" name="clearbtn">
              <property name="text">
               <string>清空</string>
              </property>
             </widget>
            </item>
           </layout>
          </item>
          <item>
           <layout class="QHBoxLayout" name="horizontalLayout_2">
            <item>
             <widget class="QListWidget" name="filelist"/>
            </item>
            <item>
             <widget class="QTableView" name="restable"/>
            </item>
           </layout>
          </item>
         </layout>
        </item>
       </layout>
      </widget>
     </widget>
     <resources/>
     <connections/>
    </ui>
    
    

    mainwindow.h

    #ifndef MAINWINDOW_H
    #define MAINWINDOW_H
    
    #include <QMainWindow>
    #include <QStringList>
    #include <QStandardItemModel>
    
    QT_BEGIN_NAMESPACE
    namespace Ui { class MainWindow; }
    QT_END_NAMESPACE
    
    class MainWindow : public QMainWindow
    {
        Q_OBJECT
    
    public:
        MainWindow(QWidget *parent = nullptr);
        ~MainWindow();
    private slots:
        void getDirSlots();
        void clearbtnSlots();
    private:
        Ui::MainWindow *ui;
    
        QStandardItemModel* mmodel;
        QStringList mImgNames;
        uint32_t mCnt;
    };
    
    #endif // MAINWINDOW_H
    
    

    mainwindow.cpp

    #include "mainwindow.h"
    #include "ui_mainwindow.h"
    #include <QFileDialog>
    #include <QDir>
    #include <QDebug>
    #include <map>
    #include <QString>
    #include <QListWidget>
    #include <QListWidgetItem>
    #include <QStandardItemModel>
    
    MainWindow::MainWindow(QWidget *parent)
        : QMainWindow(parent)
        , ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
        setWindowState(Qt::WindowMaximized); //ok
        connect(ui->dirbtn, SIGNAL(clicked()), this, SLOT(getDirSlots()));
    }
    
    MainWindow::~MainWindow()
    {
        delete ui;
    }
    
    void MainWindow::getDirSlots()
    {
        mCnt = 0;
    
        QStringList mImgNames;
        QString mFolderPath;
        if(!ui->dirname->text().isNull())
        {
            mFolderPath  = QFileDialog::getExistingDirectory(this, "Open Folder", ui->dirname->text());
        }
        else
        {
            mFolderPath = QFileDialog::getExistingDirectory(this, "Open Folder");
        }
        if (mFolderPath.isEmpty())
        {
            return;
        }
        ui->dirname->setText(mFolderPath);
    
        QDir dir(mFolderPath);
        mFolderPath = dir.fromNativeSeparators(mFolderPath);//  "\"转为"/"
        if (!dir.exists())
        {
            mImgNames = QStringList("");
        }
    
        dir.setFilter(QDir::Files);
        dir.setSorting(QDir::Name);
        dir.setNameFilters(QString("*.EBK").split(";"));
        mImgNames = dir.entryList();
        for (int i = 0; i < mImgNames.size(); ++i)
        {
            QListWidgetItem*item=new QListWidgetItem(ui->filelist);
            item->setText(mImgNames[i]);
    
            QString temp;
            mImgNames[i] = temp.append(mFolderPath).append("/").append(mImgNames[i]);
    
            ui->filelist->addItem(item);
    
            qDebug() << "entryList: " << i << "-" << mImgNames[i];
        }
    
        typedef std::map<QString, int> MapList;
        MapList map;
        qDebug() <<  mImgNames.size();
        for(int k = 0; k < mImgNames.size(); k++)
        {
            QStringList stocks;
            QFile file(mImgNames[k]);
            if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
            {
                return;
            }
            QTextStream in(&file);
            QString line = in.readLine();
            while(!line.isNull())
            {
                line.remove(QRegExp("\s"));
                qDebug() << line;
                if(map.end() == map.find(line))
                {
                    map[line]= 1;
                }
                else
                {
                    map[line] = map[line]++;
                }
                line = in.readLine();
            }
        }
    
        /* 创建表格视图 */
        QTableView *tableView =  ui->restable;
        tableView->verticalHeader()->hide();
        /* 设置表格视图大小 */
        //tableView->resize(850, 400);
    
        /* 创建数据模型 */
        mmodel = new QStandardItemModel();
        QStandardItemModel* model = mmodel;
    
        /* 设置表格标题行(输入数据为QStringList类型) */
        model->setHorizontalHeaderLabels({"次数", "代码"});
    
        /* 自适应所有列,让它布满空间 */
        tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
        int index = 0;
        for(MapList::iterator itr = map.begin(); itr != map.end(); itr++)
        {
            if(itr->second > 1)
            {
                /* 加载第一列(ID)数据 */
                model->setItem(index, 0, new QStandardItem(QString::number(itr->second, 10)));
                /* 加载第二列(User Name)数据 */
                model->setItem(index, 1, new QStandardItem(QString(itr->first.data() + 1)));
                index++;
            }
        }
        /* 设置表格视图数据 */
        tableView->setModel(model);
    }
    
    void MainWindow::clearbtnSlots()
    {
        mmodel->removeRows(0, mmodel->rowCount());
    }
    
    

    main.cpp

    #include "mainwindow.h"
    
    #include <QApplication>
    
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        MainWindow w;
        w.show();
        return a.exec();
    }
    
    
  • 相关阅读:
    jQuery 语法
    jQuery 简介
    把数据存储到 XML 文件
    XML 注意事项
    XML DOM (Document Object Model) 定义了访问和操作 XML 文档的标准方法。
    通过 PHP 生成 XML
    XML 命名空间(XML Namespaces)
    XML to HTML
    XMLHttpRequest 对象
    使用 XSLT 显示 XML
  • 原文地址:https://www.cnblogs.com/kuikuitage/p/13605009.html
Copyright © 2011-2022 走看看