同步操作将从 飞扬青云/QWidgetDemo 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
#pragma execution_character_set("utf-8")#include "frmcountcode.h"#include "ui_frmcountcode.h"#include "qfile.h"#include "qtextstream.h"#include "qfiledialog.h"#include "qfileinfo.h"#include "qdebug.h"frmCountCode::frmCountCode(QWidget *parent) : QWidget(parent), ui(new Ui::frmCountCode){ui->setupUi(this);this->initForm();on_btnClear_clicked();}frmCountCode::~frmCountCode(){delete ui;}void frmCountCode::initForm(){QStringList headText;headText << "文件名" << "类型" << "大小" << "总行数" << "代码行数" << "注释行数" << "空白行数" << "路径";QList<int> columnWidth;columnWidth << 130 << 50 << 70 << 80 << 70 << 70 << 70 << 150;int columnCount = headText.count();ui->tableWidget->setColumnCount(columnCount);ui->tableWidget->setHorizontalHeaderLabels(headText);ui->tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);ui->tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);ui->tableWidget->setSelectionMode(QAbstractItemView::SingleSelection);ui->tableWidget->verticalHeader()->setVisible(false);ui->tableWidget->horizontalHeader()->setStretchLastSection(true);ui->tableWidget->horizontalHeader()->setHighlightSections(false);ui->tableWidget->verticalHeader()->setDefaultSectionSize(20);ui->tableWidget->verticalHeader()->setHighlightSections(false);for (int i = 0; i < columnCount; i++) {ui->tableWidget->setColumnWidth(i, columnWidth.at(i));}//设置前景色ui->txtCount->setStyleSheet("color:#17A086;");ui->txtSize->setStyleSheet("color:#CA5AA6;");ui->txtRow->setStyleSheet("color:#CD1B19;");ui->txtCode->setStyleSheet("color:#22A3A9;");ui->txtNote->setStyleSheet("color:#D64D54;");ui->txtBlank->setStyleSheet("color:#A279C5;");//设置字体加粗QFont font;font.setBold(true);if (font.pointSize() > 0) {font.setPointSize(font.pointSize() + 1);} else {font.setPixelSize(font.pixelSize() + 2);}ui->txtCount->setFont(font);ui->txtSize->setFont(font);ui->txtRow->setFont(font);ui->txtCode->setFont(font);ui->txtNote->setFont(font);ui->txtBlank->setFont(font);#if (QT_VERSION > QT_VERSION_CHECK(4,7,0))ui->txtFilter->setPlaceholderText("中间空格隔开,例如 *.h *.cpp *.c");#endif}bool frmCountCode::checkFile(const QString &fileName){if (fileName.startsWith("moc_") || fileName.startsWith("ui_") || fileName.startsWith("qrc_")) {return false;}QFileInfo file(fileName);QString suffix = "*." + file.suffix();QString filter = ui->txtFilter->text().trimmed();QStringList filters = filter.split(" ");return filters.contains(suffix);}void frmCountCode::countCode(const QString &filePath){QDir dir(filePath);foreach (QFileInfo fileInfo , dir.entryInfoList()) {if (fileInfo.isFile()) {QString strFileName = fileInfo.fileName();if (checkFile(strFileName)) {listFile << fileInfo.filePath();}} else {if(fileInfo.fileName() == "." || fileInfo.fileName() == "..") {continue;}//递归找出文件countCode(fileInfo.absoluteFilePath());}}}void frmCountCode::countCode(const QStringList &files){int lineCode;int lineBlank;int lineNotes;int count = files.count();on_btnClear_clicked();ui->tableWidget->setRowCount(count);quint32 totalLines = 0;quint32 totalBytes = 0;quint32 totalCodes = 0;quint32 totalNotes = 0;quint32 totalBlanks = 0;for (int i = 0; i < count; i++) {QFileInfo fileInfo(files.at(i));countCode(fileInfo.filePath(), lineCode, lineBlank, lineNotes);int lineAll = lineCode + lineBlank + lineNotes;QTableWidgetItem *itemName = new QTableWidgetItem;itemName->setText(fileInfo.fileName());QTableWidgetItem *itemSuffix = new QTableWidgetItem;itemSuffix->setText(fileInfo.suffix());QTableWidgetItem *itemSize = new QTableWidgetItem;itemSize->setText(QString::number(fileInfo.size()));QTableWidgetItem *itemLine = new QTableWidgetItem;itemLine->setText(QString::number(lineAll));QTableWidgetItem *itemCode = new QTableWidgetItem;itemCode->setText(QString::number(lineCode));QTableWidgetItem *itemNote = new QTableWidgetItem;itemNote->setText(QString::number(lineNotes));QTableWidgetItem *itemBlank = new QTableWidgetItem;itemBlank->setText(QString::number(lineBlank));QTableWidgetItem *itemPath = new QTableWidgetItem;itemPath->setText(fileInfo.filePath());itemSuffix->setTextAlignment(Qt::AlignCenter);itemSize->setTextAlignment(Qt::AlignCenter);itemLine->setTextAlignment(Qt::AlignCenter);itemCode->setTextAlignment(Qt::AlignCenter);itemNote->setTextAlignment(Qt::AlignCenter);itemBlank->setTextAlignment(Qt::AlignCenter);ui->tableWidget->setItem(i, 0, itemName);ui->tableWidget->setItem(i, 1, itemSuffix);ui->tableWidget->setItem(i, 2, itemSize);ui->tableWidget->setItem(i, 3, itemLine);ui->tableWidget->setItem(i, 4, itemCode);ui->tableWidget->setItem(i, 5, itemNote);ui->tableWidget->setItem(i, 6, itemBlank);ui->tableWidget->setItem(i, 7, itemPath);totalBytes += fileInfo.size();totalLines += lineAll;totalCodes += lineCode;totalNotes += lineNotes;totalBlanks += lineBlank;if (i % 100 == 0) {qApp->processEvents();}}//显示统计结果listFile.clear();ui->txtCount->setText(QString::number(count));ui->txtSize->setText(QString::number(totalBytes));ui->txtRow->setText(QString::number(totalLines));ui->txtCode->setText(QString::number(totalCodes));ui->txtNote->setText(QString::number(totalNotes));ui->txtBlank->setText(QString::number(totalBlanks));//计算百分比double percent = 0.0;//代码行所占百分比percent = ((double)totalCodes / totalLines) * 100;ui->labPercentCode->setText(QString("%1%").arg(percent, 5, 'f', 2, QChar(' ')));//注释行所占百分比percent = ((double)totalNotes / totalLines) * 100;ui->labPercentNote->setText(QString("%1%").arg(percent, 5, 'f', 2, QChar(' ')));//空行所占百分比percent = ((double)totalBlanks / totalLines) * 100;ui->labPercentBlank->setText(QString("%1%").arg(percent, 5, 'f', 2, QChar(' ')));}void frmCountCode::countCode(const QString &fileName, int &lineCode, int &lineBlank, int &lineNotes){lineCode = lineBlank = lineNotes = 0;QFile file(fileName);if (file.open(QFile::ReadOnly)) {QTextStream out(&file);QString line;bool isNote = false;while (!out.atEnd()) {line = out.readLine();//移除前面的空行if (line.startsWith(" ")) {line.remove(" ");}//判断当前行是否是注释if (line.startsWith("/*")) {isNote = true;}//注释部分if (isNote) {lineNotes++;} else {if (line.startsWith("//")) { //注释行lineNotes++;} else if (line.isEmpty()) { //空白行lineBlank++;} else { //代码行lineCode++;}}//注释结束if (line.endsWith("*/")) {isNote = false;}}}}void frmCountCode::on_btnOpenFile_clicked(){QString filter = QString("代码文件(%1)").arg(ui->txtFilter->text().trimmed());QStringList files = QFileDialog::getOpenFileNames(this, "选择文件", "./", filter);if (files.size() > 0) {ui->txtFile->setText(files.join("|"));countCode(files);}}void frmCountCode::on_btnOpenPath_clicked(){QString path = QFileDialog::getExistingDirectory(this, "选择目录", "./", QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);if (!path.isEmpty()) {ui->txtPath->setText(path);listFile.clear();countCode(path);countCode(listFile);}}void frmCountCode::on_btnClear_clicked(){ui->txtCount->setText("0");ui->txtSize->setText("0");ui->txtRow->setText("0");ui->txtCode->setText("0");ui->txtNote->setText("0");ui->txtBlank->setText("0");ui->labPercentCode->setText("0%");ui->labPercentNote->setText("0%");ui->labPercentBlank->setText("0%");ui->tableWidget->setRowCount(0);}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。