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

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

Страниц: 1 [2] 3   Вниз
  Печать  
Автор Тема: Измерение времени  (Прочитано 20606 раз)
thechicho
Гость
« Ответ #15 : Октябрь 01, 2011, 21:22 »

биг сенкс!
завтра буду пробовать. доброй ночи)
Записан
thechicho
Гость
« Ответ #16 : Октябрь 02, 2011, 10:01 »

// Запускается C:\Qt\timer-build-desktop-Qt_4_7_4_for_Desktop_-_MSVC2008__Qt_SDK_________\debug\timer.exe...
если галочку Use Shadow Building убрать, не будут левые папки создаваться Показает язык

// QElapsedTimer в свой класс и запустить ей start() перед вызовом первого метода/слота
не. в первом слоте надо запускать Улыбающийся

// private:
//   QElapsedTimer      timer;
а в чем разница между private и public?
вот если бы я написал:
Код
C++ (Qt)
public:
   QElapsedTimer timer;
чо бы изменилось?
Записан
thechicho
Гость
« Ответ #17 : Октябрь 02, 2011, 10:18 »

//qint64 res = timer.elapsed();
qreal res = timer.elapsed();

в Qt есть средство для округления до сотых?
или ток так http://www.qtforum.org/article/4680/round-a-double-to-2-decimal-places.html
Записан
thechicho
Гость
« Ответ #18 : Октябрь 02, 2011, 10:37 »

Sleep(10000);
как использовать?
'Sleep' was not declared in this scope

ток так можно округлить до сотых?
qreal res = timer.elapsed();
qreal sres = res/1000;
qreal mres = sres/60;
QString sresult = QString::number(sres, 'f', 2);
qDebug() << "The slow operation took" << res << "milliseconds";
qDebug() << "The slow operation took" << sresult << "seconds";
qDebug() << "The slow operation took" << mresult << "minutes";
Записан
thechicho
Гость
« Ответ #19 : Октябрь 02, 2011, 11:11 »

Код
C++ (Qt)
qlonglong res = timer.elapsed();
qlonglong s = res/1000; QString ss = QString::number(s);
qlonglong m = s/60; QString mm = QString::number(m);
qlonglong h = m/60; QString hh = QString::number(h);
QString timeelapsed = hh + ":" + mm + ":" + ss;
 
qDebug() << res << "ms";
qDebug() << "Времени прошло: " << timeelapsed;

как-то проще можно было сделать?
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #20 : Октябрь 02, 2011, 11:43 »

// Запускается C:\Qt\timer-build-desktop-Qt_4_7_4_for_Desktop_-_MSVC2008__Qt_SDK_________\debug\timer.exe...
если галочку Use Shadow Building убрать, не будут левые папки создаваться Показает язык
спасибо, кэп
а в чем разница между private и public?
вот если бы я написал:
Код
C++ (Qt)
public:
   QElapsedTimer timer;
чо бы изменилось?
иди изучай С++
Sleep(10000);
как использовать?
'Sleep' was not declared in this scope
посмотреть внимательно на приведенный код или хотя бы просто нагуглить эту функцию и посмотреть в каком файле она объявлена. #include <Windows.h> (на юниксах есть своя функция sleep())
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #21 : Октябрь 02, 2011, 12:15 »

как-то проще можно было сделать?
Проще не знаю, правильнее можно

Код
C++ (Qt)
int res = timer.elapsed();  // elapsed вернет int
int sec = res / 1000;
int min = sec / 60;
sec %= 60;
int hr = min / 60;
min %= 60;
char buf[128];
sprintf(buf, "%2d : %2d : %2d", hr, min, sec);
qDebug() << "Времени прошло: " << buf;
 

Не Вы первый пытаетесь использовать форум как "живой хелп" Улыбающийся Особо тяжкого преступления Вы не совершаете, но это просто неэффективно: пока напишете вопрос, пока дождетесь ответа (а потом отреагируете на заслуженное посылание к учебнику Улыбающийся) - за это время самому несколько раз можно было разобраться. Спрашивайте обдуманно - и результат будет другим.
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #22 : Октябрь 02, 2011, 12:39 »

qint64 QElapsedTimer::elapsed() const
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
thechicho
Гость
« Ответ #23 : Октябрь 02, 2011, 13:20 »

// спасибо, кэп
 Показает язык

// иди изучай С++
дак это... я читал про эту фигню. там какие-то таблицы с наследованием. как чо меняется при наследовании и тп.
но я не понял как надо рассуждать, когда пихаешь в public, или в private, или в protected.
прост я запихал в паблик, проверил - работает. запихал в прайвит, тоже работает. вот и спросил какая-разница и из чего надо исходить, когда решаешь куда чо запихать.

//посмотреть внимательно на приведенный код или хотя бы просто нагуглить эту функцию и посмотреть в каком файле она объявлена. #include <Windows.h> (на юниксах есть своя функция sleep())
дак я в ассистанте глянул, там в QThread ток было. я попробовал воткнуть в код, но чота не заработало...^^
а т.к. в Вашем примере вроде как должно работать, а никаких Qt инклюдов для этого не увидел, то подумал, что это не Qt-way и делается как-то через жопу, поэтому дальше искать не стал. оказалось, тупо надо было windows.h заинклюдить) сенкс заработало)
Записан
thechicho
Гость
« Ответ #24 : Октябрь 02, 2011, 13:35 »

О_о

дак если юзать Sleep(100000);
прога (gui) зависает же...
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #25 : Октябрь 02, 2011, 13:46 »

вот и спросил какая-разница и из чего надо исходить, когда решаешь куда чо запихать.
обычно в private (или в protected если собираешься в будущем наследоваться от этого класса и эти переменные будут нужны)
О_о

дак если юзать Sleep(100000);
прога (gui) зависает же...
так никто ж и не спорит Улыбающийся то был просто показательный пример корректного функционирования таймера.
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
thechicho
Гость
« Ответ #26 : Октябрь 02, 2011, 14:23 »

// обычно в private
так почему. я не понимаю какая разница. и как мне надо думать, когда добавляю новый объект. вот Вы как рассуждаете, когда создаете новый объект какой-нить и решаете куда его запихать?

с Sleep(); все пучком) работает как часы, во всех смыслах)

Igors, да остаток не учел. сенкс:)
правда немного подправил, т.к. в доке написано:
Цитировать
Warning: We do not recommend using QString::sprintf() in new Qt code. Instead, consider using QTextStream or arg(), both of which support Unicode strings seamlessly and are type-safe. Here's an example that uses QTextStream:

в итоге получилось:
Код
C++ (Qt)
   qint64 res = timer.elapsed();
   qint64 sec = res / 1000;
   qint64 min = sec / 60;
   qint64 hr = min / 60;
   sec %= 60;
   min %= 60;
 
   QString timeElapsed = QString("%1:%2:%3").arg(hr).arg(min).arg(sec);
   //QString timeElapsed; QTextStream(&timeElapsed) << hr << ":" << min << ":" << sec;
 
   qDebug() << res << "ms";
   qDebug() << "Времени прошло: " << timeElapsed;

по поводу "живого хелпа". форум, имхо, как вариант, это средство взаимопомощи. я сам с радостью помогаю в том, в чем шарю.
по поводу эффективности. разумеется, я сначала сам пытаюсь сделать. не получается, пишу на форум проблему и надеюсь, что кто-нить, кто шарит, поможет мне разобраться. быстрее разобраться! я же не сижу тупо и не жду, когда мне готовый код "принесут на блюдечке", в это время я пытаюсь решить проблему сам. или пока переключаюсь на решение других проблем, если в тупик тут захожу.
как пример, вот тема http://www.prog.org.ru/topic_19577_0.html
я сначала сам мучил, но не допер как сделать.
потом на форуме написал в надежде, что кто-нить сталкивался с подобной проблемой и поможет мне ее решить побырому.
но, когда я написал, я же тупо не сидел и не ждал, а сам пытался сделать чо мне надо. в итоге так ничо и не получилось у меня! потратил несколько часов!
но, zenden, выручил, т.к. шарит в этом. все гениальное просто! я в шаге был от самостоятельного решения этой проблемы, но не додумал!
вот, и таких моментов довольно много возникает, поэтому пишу на форум. и не вижу ничего в этом плохого, т.к. чем больше уникального контента на сайте, тем лучше:) может у кого-нить когда-нить подобная проблема тоже возникнет, он найдет эту тему и решит ее сразу. т.е. таким образом мы помогаем друг другу сократить время на решение банальны проблем! ну это в общем мое имхо) сенкс еще раз)
« Последнее редактирование: Октябрь 02, 2011, 14:28 от thechicho » Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #27 : Октябрь 02, 2011, 15:38 »

так почему. я не понимаю какая разница. и как мне надо думать, когда добавляю новый объект. вот Вы как рассуждаете, когда создаете новый объект какой-нить и решаете куда его запихать?
в public выношу только те методы/константы, которые будет/может вызывать/считывать "пользователь" данного класса. если неконстантые переменные помещать в public, то "пользователь" сможет присваивать им что захочет, что может быть чревато. для этих целей создаются специальные методы-сеттеры, которые контролируют устанавливаемые значения.
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
thechicho
Гость
« Ответ #28 : Октябрь 02, 2011, 15:54 »

сенкс за ответ Улыбающийся
помогите тут еще плз, я застрял http://www.prog.org.ru/topic_19579_0.html
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #29 : Октябрь 02, 2011, 20:22 »

прост я запихал в паблик, проверил - работает. запихал в прайвит, тоже работает. вот и спросил какая-разница и из чего надо исходить, когда решаешь куда чо запихать.
"чо" и.т.п. - ну это может забавно первые пару раз, а потом начинает раздражать/утомлять/доставать  Улыбающийся Так что лучше без этой стилизации.

По поводу public/private. В теории все просто: мол, объявляя private мы тем самым заявляем что можем менять эти внутренние данные как хотим - и эти изменения не коснутся других частей приложения, оно будет продолжать работать. В жизни все сложнее. Нет проблем сделать все private и насовать побольше get/set методов, но это само по себе еще ничего не дает - части приложения остаются столь же зависимы друг от друга. На эту тему можно написать массу диссертаций, но простого ответа нет  Я часто применяю такой прием - сначала делаю все (ну или почти все) public и наблюдаю что получается плохо (где пошли злоупотребления). Потом меняю на private, добавляю методы (кстати довольно редко это простые get/set) - и дела идут лучше. Короче - познается на практике  Улыбающийся
Записан
Страниц: 1 [2] 3   Вверх
  Печать  
 
Перейти в:  


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