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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Как сделать глобальную переменную?  (Прочитано 8419 раз)
nikakula
Гость
« : Ноябрь 16, 2014, 18:04 »

Есть две формы. Переменная i высчитывается в первой форме, а отображаться она должна во второй форме. Для этого, на сколько я понимаю, она должна быть глобальной. Как ее таковой сделать?
Записан
vitfil
Гость
« Ответ #1 : Ноябрь 16, 2014, 18:42 »

Глобальные переменные... "Отрежу руку!" (С) "Мастер и Маргарита"
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #2 : Ноябрь 16, 2014, 18:48 »

можно передать переменную в другую форму, например через конструктор или отдельный метод
Записан

Изучением 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
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #3 : Ноябрь 16, 2014, 19:53 »

Есть две формы. Переменная i высчитывается в первой форме, а отображаться она должна во второй форме. Для этого, на сколько я понимаю, она должна быть глобальной. Как ее таковой сделать?
Как только переменная высчиталась, нужно послать сигнал с ее значением, а во второй форме сделать слот.

P.S. Ну и конечно, плохо если что-то вычисляется в формах.
« Последнее редактирование: Ноябрь 16, 2014, 19:57 от Old » Записан
Alexu007
Гость
« Ответ #4 : Ноябрь 17, 2014, 00:19 »

Чем плоха глобальная переменная? Тем, что её может несанкционированно изменить чужой дядя программист? Ну так он и сигнал-слот поменять может при желании.

И вообще это всё байда для крупных проектов с десятками програмистов. Маленкую програмульку можно написать с нарушением всех правил.

Код
C++ (Qt)
//В первой форме в начале объявляете переменную:
 
#include ...
#include ...
#include ...
 
int global_XYZ = 10;
 
//во второй, где нужно эту переменную увидеть:
//название переменной может быть любой. global_XYZ это для примера.
 
#include ...
#include ...
#include ...
 
extern int global_XYZ;



И эта. Плохо что-то вычислять в формах. А где вычислять то? Между формами?
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #5 : Ноябрь 18, 2014, 09:58 »

И вообще это всё байда для крупных проектов с десятками програмистов. Маленкую програмульку можно написать с нарушением всех правил.
Конечно это не преступление, но рано или поздно жизнь научит: чем меньше глобальных переменных - тем лучше. Хорошее лекарство (ускоритель понимания) - параллельные расчеты.
Записан
DenKor29
Гость
« Ответ #6 : Ноябрь 21, 2014, 08:23 »

Есть две формы. Переменная i высчитывается в первой форме, а отображаться она должна во второй форме. Для этого, на сколько я понимаю, она должна быть глобальной. Как ее таковой сделать?

Используйте концепцию сигнал - слот и будет Вам глобальное счастье  Улыбающийся
Из первой формы высылается сигнал при изменении заначения переменной. Во второй форме этот сигнал ловится в нужный слот. Глобальная переменная при этом не нужна.
Записан
Alexu007
Гость
« Ответ #7 : Ноябрь 21, 2014, 18:08 »

А можно вопрос чуть-чуть не по теме? Как правильно сделать досрочный выход из вложенных циклов? Ну, например, нужно найти координаты чего-нибудь на плоскости. goto как я понимаю, очень не приветствуется?
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #8 : Ноябрь 21, 2014, 18:31 »

А можно вопрос чуть-чуть не по теме? Как правильно сделать досрочный выход из вложенных циклов? Ну, например, нужно найти координаты чего-нибудь на плоскости. goto как я понимаю, очень не приветствуется?

Можно и через goto. Религиозные убеждения обычно прощают использование goto во вложенных циклах. Но фундаменталисты предпочитают использовать булевый флаг (типа found = true), по которому обрываются все внешние циклы.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #9 : Ноябрь 21, 2014, 18:34 »

А можно вопрос чуть-чуть не по теме? Как правильно сделать досрочный выход из вложенных циклов? Ну, например, нужно найти координаты чего-нибудь на плоскости. goto как я понимаю, очень не приветствуется?
Если действительно глубокая вложенность (5-6 циклов), то возможно испустить исключение (throw). В остальных случаях - банальный break, или вставка флага в условие цикла, напр

Код
C++ (Qt)
bool found = false;
for (int i = 0; i < numI; ++i) {
for (int j = 0; j < numJ; ++j) {
 // do something
 if (...) {
  ...
  found = true;
  break;
 }
}
if (found) break;
}
 
Код
C++ (Qt)
bool found = false;
for (int i = 0; i < numI && !found; ++i) {
for (int j = 0; j < numJ && !found; ++j) {
 // do something
 if (...) {
  ...
  found = true;
 }
}
}

gpto используется когда нужна исключительная заточка по скорости (часто вкупе с likely/unlikely)
Записан
vulko
Гость
« Ответ #10 : Ноябрь 21, 2014, 23:43 »

А можно вопрос чуть-чуть не по теме? Как правильно сделать досрочный выход из вложенных циклов? Ну, например, нужно найти координаты чего-нибудь на плоскости. goto как я понимаю, очень не приветствуется?

Можно и через goto. Религиозные убеждения обычно прощают использование goto во вложенных циклах. Но фундаменталисты предпочитают использовать булевый флаг (типа found = true), по которому обрываются все внешние циклы.

Не можно.
Вместо goto можно делать if else, continue, return и break.
Понимание почему не можно приходит при переносе кода, например, из плюсов в жабу.
И хорошо если goto используется для перехода ниже по функции, а если их много и много условий и они дают нелинейное ветвление...

А бывает что с помощью goto как бы упрощают логику алгоритма, при этом читабельность такого кода может стремиться к нулю.

Религия тут ни при чем.
Записан
Alexu007
Гость
« Ответ #11 : Ноябрь 22, 2014, 15:42 »

А если пять вложенных циклов? Четыре ifа против одного goto только потому, что кто-то когда-то придумал, что низзя...

Может в старые стародавние времена, когда вся программа представляла непрерывную последовательность команд - чрезмерное увлечение goto и приводило к неприятностям. Но сегодня программа (на Qt) это набор обработчиков (функций), а goto прыгает только внутри функции.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #12 : Ноябрь 22, 2014, 16:49 »

А если пять вложенных циклов? Четыре ifа против одного goto только потому, что кто-то когда-то придумал, что низзя...
Ну в общем-то правильно придумал. Если необходимость такого глубокого выхода возникает - значит что-то не так, и это наталкивает на какие-то мысли/решения. А с goto просто "затыкается дырка". Вообще приведите живой пример, а то "если-если"
Записан
Bepec
Гость
« Ответ #13 : Ноябрь 22, 2014, 17:08 »

Goto лишает код структурированности. В результате его использования точка выполнения кода прыгает хз куда. И зачастую в таких конструкциях пока не пройдёшь дебагером, логики не поймёшь.

И потому это плохо. Ведь при добавлении кода без понимания всей логики можно таких дров наломать Веселый Что ай ай ай.
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #14 : Ноябрь 22, 2014, 19:08 »

Не можно.
Вместо goto можно делать if else, continue, return и break.

При этом страдает другое религиозное чуйство - красота кода.

Понимание почему не можно приходит при переносе кода, например, из плюсов в жабу.

Почему? Не вижу связи (я переносил код).
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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