我有text file如下:
Option
代码如下:
05:59:57 - [0x1010001]05:59:57 - (2576) WRITING TO NON-VOLATILE MEMORY IS DONE
06:00:00 - [0x1010001]06:00:00 - (23371) T_Check_Buddy !!!
06:00:00 - DMA:310127952,01,REQ:BRDTIM 82 07 83 29 05 0f 04 12 06 00
06:00:00 -
06:00:00 - EvmTbl............
06:00:00 - Maintenancing & Filling VboxTbl...DONE
06:00:01 - DMA:310128070,01,IND:KTSPER 96 10 85 fc 00 28 58
06:00:01 - DMA:310128071,01,REQ:KTSIDK 82 10 85 fc 81 00 47 02
06:00:01 - DMA:310128091,01,IND:KTSPER 96 10 86 fc 00 28 58
06:00:01 - DMA:310128091,01,REQ:KTSIDK 82 10 86 fc 81 00 47 02
06:00:02 - SIP:310129384, REQ: KINFO To:1800 To-Host:192.168.178.230 Ktext: 02 78 0e
06:00:30 - [0x1010001]06:00:30 - (23371) T_Check_Buddy !!!
06:00:32 - SIP:310159385, REQ: KINFO To:1800 To-Host:192.168.178.230 Ktext: 02 78 0e
06:00:46 - IPT:310173571,255,IND: CONFIG 87 03 4c 43 4e
我在表单中执行了按钮和lineedits。之后,我分割了时间范围hh:mm:ss format。因为我必须对时间范围进行错误检查。
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <fstream>
#include <iostream>
#include <string>
#include <sstream>
#include<QFile>
#include<QTextStream>
#include<QStringList>
#include<QDebug>
#include<QMessageBox>
using namespace std;
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
我读了文本文件和拆分文件。我需要将文本文件中的时间范围与用户输入的时间范围进行比较。
void MainWindow::on_pushButton_3_clicked()
{
QString output;
QString line;
QStringList splitted;
QString times;
int sayac1=0,sayac2=0;
bool control1=false;
bool control2=false;
QString firsttime=ui->lineEdit->text(); //first time range that entered
by user.
QStringList list1=firsttime.split(":"); //Girilen time split edildi.
if (list1.size() < 3)
QMessageBox::warning(this,"LIST","ALANLAR BOŞ BIRAKILAMAZ!");
QString hour1=list1[0];
hour1.toInt();
QString minute1=list1[1];
minute1.toInt();
QString second1=list1[2];
second1.toInt();
QString secondtime=ui->lineEdit_2->text(); //second time range that
entered by user.
QStringList list2=secondtime.split(":"); //Girilen aralık split
edildi.
if(list2.size() < 3)
QMessageBox::warning(this,"LIST","ALANLAR BOŞ BIRAKILAMAZ!");
QString hour2=list2[0];
hour2.toInt();
QString minute2=list2[1];
minute2.toInt();
QString second2=list2[2];
second2.toInt();
在下面的代码中,我按照上面提到的那样进行了错误检查。并且,我尝试在指定的时间间隔显示记录。但是当我运行代码时,我创建的textbrowser中没有任何内容显示记录。我不明白为什么会发生这种情况。此外,没有错误发生。例如,用户输入05:59:57到第一个lineedit和06:00:46到第二个lineedit.Then用户点击按钮以此时间间隔显示记录。我想显示记录从05:59:57到06:00:46.但是,textbrowser中没有记录。似乎没有。我怎样才能解决这个问题?
QFile file("C:\\kaynak\\naile.txt");
if(file.open(QIODevice::ReadOnly | QIODevice::Text)){
QTextStream in(&file);
while(!in.atEnd())
{
line = in.readLine()+"\n";
output.append(line);
if(line.contains(" - ")){
splitted=line.split(" - ");
times=times+" "+splitted[0];
}
if(splitted[0]!=firsttime && control1==false){
sayac1 = sayac1+1;
}
else
control1=true;
if(splitted[0]!=secondtime && control2==false){
sayac2++;
}
else
control2=true;
}
答案 0 :(得分:0)
为了比较我们必须使用QTime
类的时间,这个类提供了实现时间比较运算符。除此之外,建议使用QTimeEdit
为这些参数提供合适的小部件,因此我建议您更改它们而不是使用QLineEdit
。
必须建立适当的格式,为此完成以下工作:
#define FORMAT "hh:mm:ss"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
ui->fromTimeEdit->setDisplayFormat(FORMAT);
ui->toTimeEdit->setDisplayFormat(FORMAT);
ui->toTimeEdit->setTime(QTime::fromString("23:59:59", FORMAT));
}
然后在按下按钮时调用的插槽中,我们执行过滤的任务,我们得到时间,如果限制足够,我们会进行一些检查。在我们读取文件后,我们得到前8个字符,我们及时转换它,如果它是有效的,它是在我们更改标志的时间之间,如果相反它是无效的,我们保持原样,所有上述在以下代码中实现:
void MainWindow::on_pushButton_clicked()
{
const QTime from = ui->fromTimeEdit->time();
const QTime to = ui->toTimeEdit->time();
bool copyLog = false;
if(from <= to){
QFile file("/path/of/kaynak.log");
ui->textEdit->clear();
if(file.open(QIODevice::ReadOnly | QIODevice::Text)){
QTextStream in(&file);
while(!in.atEnd()){
const QString line = in.readLine();
const QTime timeLog = QTime::fromString(line.left(8), FORMAT);
if(timeLog.isValid()){
copyLog = timeLog >= from && timeLog <= to;
}
if(copyLog){
ui->textEdit->append(line);
QApplication::processEvents();
}
}
}
}
}
下图显示了结果:
完整示例可在以下link
中找到