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

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

Страниц: 1 [2] 3 4   Вниз
  Печать  
Автор Тема: Как добавить файл .cpp в проект?  (Прочитано 26644 раз)
Bepec
Гость
« Ответ #15 : Декабрь 07, 2013, 15:20 »

Нет, неправильно. Это напрямую относится к программированию и называется архитектурой программы.

Но вы учтите, что позже вам понадобится изменить цвет лейбла, потом размер, потом окно прятать/показывать. И вот тогда среди десяти пятнадцати файлов найти эту хрень сможете только вы. А если пару месяцев пройдёт, то и вы не найдете сразу Улыбающийся

Это так называемая инкапсуляция. Снаружи должен торчать только интерфейс аля setText.
А дальнейшие действия происходят в самом классе. И разобраться будет очень легко, ведь будет одна функция одного класса Улыбающийся

http://ru.wikipedia.org/wiki/%D0%98%D0%BD%D0%BA%D0%B0%D0%BF%D1%81%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D1%8F_(%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5) почитайте на досуге.

PS это не удобочитаемость кода (хотя частично она), это для увеличения скорости отладки и снижения сложности программы. Ведь гораздо приятнее разбираться в
Код:
myWindow->setText("tratata")
чем в
Код:
globalPoint->ui->label_sostoyanieHreny->setText("tratata");

PPS и поведение всей программы вы сможете изменить исправлением одной функции Улыбающийся В общем полезная и умная вещь.
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #16 : Декабрь 07, 2013, 18:37 »

для подобных ситуаций как раз и были придуманы сигналы/слоты. кодек отправляет какое-то значение прогресса, а класс формы уже отображает это значение.
Записан

Изучением 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
Alexu007
Гость
« Ответ #17 : Декабрь 08, 2013, 12:30 »

Кодек написан на си 20 лет назад - какой сигнал он может отправить? Хотя это мысль. Есть два варианта: 1.Тупо перетащить функцию в другой файл, и всё заработает. 2.Мутить с сигналами.
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #18 : Декабрь 08, 2013, 13:04 »

сделай С++-обертку над ним
Записан

Изучением 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
Alexu007
Гость
« Ответ #19 : Декабрь 08, 2013, 13:24 »

Над этим и работаю.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #20 : Декабрь 08, 2013, 15:15 »

Проект большой, 10 файлов .cpp (и .h соответственно).
Ну очень большой  Улыбающийся

Ведь гораздо приятнее разбираться в
Код:
myWindow->setText("tratata")
чем в
Код:
globalPoint->ui->label_sostoyanieHreny->setText("tratata");
Наоборот, во втором случае ясно что делается, видно что label и какой. А что делает myWindow->setText? Изменяет title окна? Ничего др в голову не приходит.  

Это так называемая инкапсуляция. Снаружи должен торчать только интерфейс аля setText.
А дальнейшие действия происходят в самом классе. И разобраться будет очень легко, ведь будет одна функция одного класса Улыбающийся
UI имеет точно не один элемент, поэтому если начать оборачивать обращения к ним - десятка 2 набежит даже для скромного UI. Ладно, автор не обязан следовать собственным рекомендациям - они даются для других  Улыбающийся
Записан
Bepec
Гость
« Ответ #21 : Декабрь 08, 2013, 15:20 »

Только одну реплику я разрешу себе в адрес Igors.

Если вам так нравится читать код хзчто из хзчего и у хзчего на нём размещенного вызвать функцию setText, тогда пишите так и не жалуйтесь на стили других Улыбающийся

PS просто вы, Igors чрезвычайно любите цепляться к тексту примера. Улыбающийся 
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #22 : Декабрь 08, 2013, 16:17 »

PS просто вы, Igors чрезвычайно любите цепляться к тексту примера. Улыбающийся 
Так пример тот "по книжке", а не "по жизни", поэтому эффект получился обратный. Тогда уж для обертки setHrenText  Улыбающийся
Записан
Alexu007
Гость
« Ответ #23 : Декабрь 08, 2013, 17:08 »

Че то не получается послать сигнал из другого файла. Пишет что: 'mySignal' was not declared in this scope.
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #24 : Декабрь 08, 2013, 17:34 »

Код в студию Улыбающийся
Записан

Alexu007
Гость
« Ответ #25 : Декабрь 08, 2013, 20:03 »

Спасиб, заработало. Функцию, которая эмитирует сигнал, сделал членом класса виджет - mySignal увидела. А вот label-ы всё равно видеть не хочет, ну да хрен с ними. И так сойдёт.
Записан
Alexu007
Гость
« Ответ #26 : Декабрь 08, 2013, 20:47 »

С временем поможете разобраться? Хочу счётчик времени кодирования прикрутить. Для этого:

Код
C++ (Qt)
   QTime time;
 
   time.setHMS (0, 0, 0, 0);
   time.start();
 
   //а в функции, которая вызывается через определённые промежутки времени
   //(через каждые 100 фреймов)
 
   QString str = time.toString("hh:mm:ss");
 
   ui->label4->setText(str);

Часики не тикают, а выдают однократно компьютерное время. Если убрать time.start() выдают нули. Я вообще ждал, что time стартует с нуля и каждый раз будет показывать меняющееся время.


Записан
Bepec
Гость
« Ответ #27 : Декабрь 08, 2013, 20:57 »

Вы каждый раз создаёте новое время и показываете его. Точнее вероятно вы вызываете данную функцию один раз Улыбающийся
Записан
Alexu007
Гость
« Ответ #28 : Декабрь 08, 2013, 21:12 »

Не, не. Установка времени в нули и time.start() выполняется перед началом кодирования - то есть один раз при нажатии кнопки.
QString str = time.toString("hh:mm:ss") вызывается многократно. Вот полный текст места, откуда оно вызывается, в label3 цифры переключаются как положено:


Код
C++ (Qt)
//вызывается через каждые 100 закодированных фреймов
void Widget::MyEventHandler3()
{
   QString str = time.toString("hh:mm:ss");
 
   ui->label3->setText(QString::number(gfp->frameNum));
 
   ui->label4->setText(str);
 
   QApplication::processEvents();
}



 
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #29 : Декабрь 08, 2013, 21:12 »

Замер времени выполнения кода делается так:

http://doc.crossplatform.ru/qt/4.7.x/qtime.html#start

Код
C++ (Qt)
QTime t;
t.start();
some_lengthy_task();
qDebug("Time elapsed: %d ms", t.elapsed());
 
Записан

Страниц: 1 [2] 3 4   Вверх
  Печать  
 
Перейти в:  


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