

工程配置文件
#-------------------------------------------------
#
# Project created by QtCreator 2015-04-03T12:44:12
#
#-------------------------------------------------
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = untitled4
TEMPLATE = app
SOURCES += main.cpp\
mywidget.cpp
HEADERS += mywidget.h
FORMS += mywidget.ui
头文件
#ifndef MYWIDGET_H
#define MYWIDGET_H
#include <iostream>
#include <QWidget>
#include <QWizard>
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
~Widget();
private slots:
void on_pushButton_5_clicked();
void readFile(const char* filename);
private:
Ui::Widget *ui;
};
#endif // MYWIDGET_H
实现文件
#include "mywidget.h"
#include "ui_mywidget.h"
#include <QDebug>
#include <QFileDialog>
#include <QMessageBox>
#include <string>
#include <iostream>
#include <fstream>
#include <QString>
using namespace std;
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
}
Widget::~Widget()
{
delete ui;
}
// 文件对话框
void Widget::on_pushButton_5_clicked()
{
QStringList fileNames = QFileDialog::getOpenFileNames(this,tr("文件对话框"),
"F:",tr("文本文件(*txt)"));
qDebug()<< "fileNames:"<< fileNames;
readFile(fileNames[0].toStdString().c_str());
}
void Widget::readFile(const char *filename)
{
string temp;
string anntemp = "";
int totalLinNum = 0;
int headFileNum = 0;
int annotateNum = 0;
int blankNum = 0;
ifstream in(filename);
while(getline(in,temp)){
totalLinNum++;
anntemp.append(temp.c_str());
anntemp.append("\r\n");
if(!temp.find("#")){
headFileNum++;
}
if(temp.empty()){
blankNum++;
}
}
int annindex = 0;
while(anntemp[annindex]){
if(anntemp[annindex] == '/' && anntemp[annindex+1] == '/'){
annotateNum++;
}
if(anntemp[annindex] == '/' && anntemp[annindex+1] == '*'){
annindex+=2;
annotateNum++;
while(anntemp[annindex] && anntemp[annindex] != '*' && anntemp[annindex] != '/'){
if(anntemp[annindex] == '\n'){
annotateNum++;
}
annindex++;
}
}
annindex++;
}
QMessageBox::information(this,tr("注释行数:"),
//qstring转换成char*
tr(QString("%1").arg(annotateNum).toLatin1().data()),
QMessageBox::Ok);
QMessageBox::information(this,tr("代码总行数:"),
tr(QString("%1").arg(totalLinNum).toLatin1().data()),
QMessageBox::Ok);
QMessageBox::information(this,tr("包含的头文件数:"),
tr(QString("%1").arg(headFileNum).toLatin1().data()),
QMessageBox::Ok);
QMessageBox::information(this,tr("空白的行数:"),
tr(QString("%1").arg(blankNum).toLatin1().data()),
QMessageBox::Ok);
qDebug()<<"注释行数:"<< annotateNum;
qDebug()<<"代码总行数:"<<totalLinNum;
qDebug()<<"包含的头文件数:"<<headFileNum;
qDebug()<<"空白的行数:"<<blankNum;
}
主文件
#include "mywidget.h"
#include <QApplication>
#include <QTextCodec> //添加头文件
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8")); //使程序中可以使用中文
Widget w;
w.show();
return a.exec();
}
布局文件
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>Widget</class>
<widget class="QWidget" name="Widget">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>400</width>
<height>300</height>
</rect>
</property>
<property name="windowTitle">
<string>Widget</string>
</property>
<widget class="QPushButton" name="pushButton_5">
<property name="geometry">
<rect>
<x>160</x>
<y>70</y>
<width>75</width>
<height>23</height>
</rect>
</property>
<property name="text">
<string>选择文件</string>
</property>
</widget>
</widget>
<layoutdefault spacing="6" margin="11"/>
<resources/>
<connections/>
</ui>