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.



  • 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"



  • 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.