#include "FITKAbstractTextReader.h" #include #include #include #include namespace Interface { bool FITKAbstractTextReader::loadFile() { QFile f(_fileName); //文件存在性 if (f.exists() && f.open(QIODevice::ReadOnly | QIODevice::Text)) { while (true) { //支持两种换行符 QByteArray context = f.readAll(); _totalContext = context.split('\n'); _totalLine = _totalContext.size(); if (_totalLine > 2) break; _totalContext = context.split('\r\n'); _totalLine = _totalContext.size(); break; } } f.close(); //分割失败 if (_totalLine < 2) return false; return true; } QString FITKAbstractTextReader::readLine() { return this->getLine(_currentLine++); } void FITKAbstractTextReader::sendCurrentPercent(int p /*= -1*/) { static int recordP = -1; if (p < 0) { //计算百分比 const float pro = _currentLine / (float)_totalLine; p = pro * 100; } //避免闪烁不显示进度条 if (p == recordP) return; recordP = p; //完成后等待主线程2秒 if (p == 100) std::this_thread::sleep_for(std::chrono::seconds(2)); emit sendProcessSig(this, p); } void FITKAbstractTextReader::backLine() { //回退行 --_currentLine; if (_currentLine < 0) _currentLine = 0; } QString FITKAbstractTextReader::nextLine() { return this->getLine(_currentLine + 1); } QString FITKAbstractTextReader::previousLine() { return this->getLine(_currentLine - 1); } bool FITKAbstractTextReader::atEnd() { //结束判断 return _currentLine >= _totalLine; } int FITKAbstractTextReader::getCurrentLineNum() { //当前行号,从1开始 return _currentLine + 1; } QString FITKAbstractTextReader::getCurrentLine() { return this->getLine(_currentLine); } QString FITKAbstractTextReader::getLine(int index) { //获取行 if (index < 0 || index >= _totalLine) return QString(); return _totalContext[index]; } }