Russian Qt Forum
Ноябрь 24, 2024, 17:50 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QTime что с ним происходит ?  (Прочитано 8583 раз)
BuRn
Гость
« : Декабрь 13, 2011, 07:58 »

вообщем сделал так :
Код:
timeInput = QTime::currentTime();
WorkTime = new QTimer(this);
connect(WorkTime,SIGNAL(timeout()),this,SLOT(SetWorkTime()));
WorkTime->start(1000);
слот :
Код:
void MainWindow::SetWorkTime()
{
    QTime curenttime  = QTime::currentTime();
    QTime t;
    int hours = curenttime.hour() - timeInput.hour();
    int minuts = curenttime.minute() - timeInput.minute();
    int seconds =curenttime.second() - timeInput.second();
    t.setHMS(hours,minuts,seconds);
    ui->labelWorkTime->setText(t.toString());
}
Идея показывать время от входя в программу, все бы ничего, за исключением того , что почему-то с лейбла моего пропадает временами это время, просто не выводится туда ... в чем мб косяк ?
Записан
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #1 : Декабрь 13, 2011, 08:27 »

в чем мб косяк ?
Секунды, минуты (да в принципе и часы) у вас могут становиться отрицательными. Тут, вероятно, и косяк.
Записан
Mikhail
Программист
*****
Offline Offline

Сообщений: 587


Просмотр профиля
« Ответ #2 : Декабрь 13, 2011, 08:33 »

Надо проверять на валидность.
Приотрицательных часах минутах или секундах.

Проще надо быть.
используй elapsed() от QTime
Записан
Bepec
Гость
« Ответ #3 : Декабрь 13, 2011, 09:13 »

Только хотел про Elapsed написать. Он возвращает количество прошедшего времени в мс (а там уж сам разбивай по мс/с/мин/часам)
Записан
BuRn
Гость
« Ответ #4 : Декабрь 15, 2011, 03:10 »

что - то я ничерта не понял, ну возвращает он время в ms с тех пор как пошел старт, а толку то ?
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #5 : Декабрь 15, 2011, 04:37 »

Перечитай пост Bepec
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Bepec
Гость
« Ответ #6 : Декабрь 15, 2011, 06:55 »

Burn, на будущее:

1000 мс = 1 сек
60 сек = 1 мин
60 мин = 1 час
24 часа = 1 сутки
30/31 суток = 1 месяц
12 месяцев = 1 год

Elapsed тебе возвращает прошедшее время в мс. А перевести при помощи арифметических операций - уже твоё дело.
Записан
fuCtor
Гость
« Ответ #7 : Декабрь 16, 2011, 08:29 »

Можно воспользоваться также:
Код
C++ (Qt)
int QDateTime::secsTo ( const QDateTime & other ) const
int QTime ::secsTo ( const QTime & t ) const

Кому что нравится.
Записан
BuRn
Гость
« Ответ #8 : Декабрь 16, 2011, 17:54 »

все равно не понятно, вот делаю что
Код:
timeInput = new QTime;
timeInput->start();
timeInput->setHMS(0,0,0);
WorkTime = new QTimer(this);
connect(WorkTime,SIGNAL(timeout()),this,SLOT(SetWorkTime()));
далее в слоте просто выставляю время прибавляя секунду
Код:
timeInput->addSecs(1);
ui->labelWorkTime->setText(timeInput->toString());
но почему - то глядя в отладчике
addSecs вообще ничего не делает, просто тупо как были 0 так и остаются, либо показывается текущее время
Записан
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #9 : Декабрь 17, 2011, 00:12 »

Так вы ж таймер WorkTime не запускаете нигде.
Смысл start + setHMS так же не ясен.
Записан
BuRn
Гость
« Ответ #10 : Декабрь 17, 2011, 00:41 »

запускаю, обрезал код просто
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.069 секунд. Запросов: 23.