Restar dos valores QString



  • Hola,
    Estoy intentando restar dos horas.
    QString 1 = "11:00";
    QString 2 = "10:00";

    Me gustaría guardar el resultado de (11:00 - 10:00) dentro de otro QString.

    ¿Alguién sabe como podría hacerlo?

    Gracias por contestar.


  • Moderators

    Hola

    ¿Porqué no usas QTime?

    Saludos



  • @juanki

    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;
    0

    qDebug()<<result;
    QTime("11:00:00.000")

    qDebug()<<result2;
    "11:00"


  • Moderators

    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));


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.