Restar dos valores QString
-
He hecho esto:
QTime hour_1 = QTime::fromString(sHour_1,"hh:mm"); QTime hour_2 = QTime::fromString(sHour_2,"hh:mm"); qDebug()<<hour_2; int secs = hour_2.second(); qDebug()<<secs; QTime result = hour_1.addSecs(-secs); QString result2 =result.toString("hh:mm"); qDebug()<<result; qDebug()<<result2;
Pero el resultado es este:
qDebug()<<sHour_1;
"11:00"qDebug()<<sHour_2;
"10:00"qDebug()<<hour_2;
QTime("10:00:00.000")qDebug()<<secs;
0qDebug()<<result;
QTime("11:00:00.000")qDebug()<<result2;
"11:00" -
Hola
Lo que te ocurre es que el método second te da los segundos que tiene la hora que le diste al QTime, en tu caso pusiste la hora "11:00:00", que son las 11, 0 minutos y 0 segundos, de ahí que te de 0.
La clase QTime tiene otro método, msecsSinceStartOfDay, que te da los milisegundos que hay desde el inicio del día "00:00:00" hasta la hora que pusiste en el QTime.
Creo que ese método sí puedes usarlo para restar las dos horas:
QTime hora1 = QTime::fromString("11:00", "hh:mm"); QTime hora2 = QTime::fromString("10:00", "hh:mm"); qDebug() << "hora 1:" << hora1; qDebug() << "hora 2:" << hora2; qDebug() << "Segundos hora 1:" << hora1.msecsSinceStartOfDay() / 1000; qDebug() << "Segundos hora 2:" << hora2.msecsSinceStartOfDay() / 1000; qDebug() << "diferencia:" << (hora1.msecsSinceStartOfDay() / 1000) - (hora2.msecsSinceStartOfDay() / 1000);
Un saludo
-
Pues es facil
(Antes lo pasas a int con un split y un QStrinList o lo coges, como en el ejemplo, de un QTimeEdit).
int Segundos1 = ui->timeEdit->time().second();
int Segundos2 = ui->timeEdit_2->time().second();
int Minutos1 = ui->timeEdit->time().minute();
int Minutos2 = ui->timeEdit_2->time().minute();
int Hora1 = ui->timeEdit->time().hour();
int Hora2 = ui->timeEdit_2->time().hour();
int TotalSegundos1 = (Hora1 * 3600) + (Minutos1 * 60) + Segundos1;
int TotalSegundos2 = (Hora2 * 3600) + (Minutos2 * 60) + Segundos2;
int Resto = TotalSegundos1 - TotalSegundos2;
int horas, minutos, segundos;
horas = (Resto / 3600);
minutos = ((Resto - horas * 3600) / 60);
segundos = Resto - (horas * 3600 + minutos * 60);
QString Hour, Minutes, Seconds;
if (horas <= 10)
Hour = "0"+QString::number(horas);
else
Hour = QString::number(horas);
if (minutos <= 10)
Minutes = "0"+QString::number(minutos);
else
Minutes = QString::number(minutos);
if (segundos <= 10)
Seconds = "0"+QString::number(segundos);
else
Seconds = QString::number(segundos);
ui->lineEdit_67->setText(Hour+":"+Minutes+":"+Seconds);Mas o menos.
Saludos!!!
-
Primero tendrás que convertir estas horas a números enteros. Luego podrás calcular y posteriormente sacar el valor en texto usando QString::number(int);
Puedes usar QString.split para separar las horas y minutos y hacer la resta por separado. Luego, para juntarlo puedes hacer esto: QString(QString::number(int) + ":" + QString::number(int));