Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите составить письмо на english в nokia, Formal parameters in SIGNAL macro 
V
    Опции темы
borisbn
Дата 5.4.2010, 06:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 48
Всего: 135



Привет всем.
Хочу составить письмо с предложением в nokia. Английский знаю, но боюсь ошибиться (да и форумный разум составит более корректно)
А предложение следующее:
Во всех форумах (не только на vingrad) очень частый вопрос - не коннектится сигнал к слоту, а причина - почти всегда одна и та же: не убрали (при копировании) формальный параметр в макросе SIGNAL или SLOT. 
Предложение же следующее: пусть функция connect/disconnect будет чуть-чуть "поумнее", и сама вырежет определение формальных параметров

P.S. Кстати, куда лучше отправить письмо с предложением ? (поручик - молчать smile


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
boostcoder
Дата 5.4.2010, 07:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 4
Всего: 110



Цитата(borisbn @  5.4.2010,  06:59 Найти цитируемый пост)
причина - почти всегда одна и та же: не убрали (при копировании) формальный параметр в макросе SIGNAL или SLOT. 

поясните...
PM WWW   Вверх
borisbn
Дата 5.4.2010, 09:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 48
Всего: 135



Цитата(boostcoder @  5.4.2010,  07:09 Найти цитируемый пост)
Цитата(borisbn @  5.4.2010,  06:59 )причина - почти всегда одна и та же: не убрали (при копировании) формальный параметр в макросе SIGNAL или SLOT. поясните...


очень часто в форумах задаётся вопрос типа: не работает сигнал/слот, вот мой код
Код

connect( &obj
            , SIGNAL( somethingChanged( SomeThing & formal_parameter_name )
            , SLOT( onSomethingChanged( SomeThing & formal_parameter_name )
            );

при этом connect не будет работать, т.к. нужно было убрать formal_parameter_name из макроса SIGNAL. IMHO совершенно не сложно сделать это внутри функции connect. Под "совершенно не сложно сделать" я имею ввиду разработчиков Qt, конечно.


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
boostcoder
Дата 5.4.2010, 09:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 4
Всего: 110



borisbn, ах вот вы о чем.
я все же склонен полагать, что это целиком обязанность программиста.
PM WWW   Вверх
SABROG
Дата 5.4.2010, 09:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 81
Всего: 91



Вообще у них об этом в документации сказано. Не пойму откуда можно скопировать код, который заведомо не будет работать:

Цитата

This example ensures that the label always displays the current scroll bar value. Note that the signal and slots parameters must not contain any variable names, only the type. E.g. the following would not work and return false:

 // WRONG
 QObject::connect(scrollBar, SIGNAL(valueChanged(int value)),
                  label, SLOT(setNum(int value)));


Мета-объектный компилятор это не полноценный компилятор типа C++, он не собирает информацию о пользовательских типах, поэтому информацию "int value" можно трактовать точно также как и возможное определение типа "int &", "int *"

Это сообщение отредактировал(а) SABROG - 5.4.2010, 09:37


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
borisbn
Дата 5.4.2010, 09:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 48
Всего: 135



boostcoder
Цитата(boostcoder @  5.4.2010,  09:29 Найти цитируемый пост)
я все же склонен полагать, что это целиком обязанность программиста.

согласен. пускай это будет обязанность программиста из Nokia smile


SABROG
Цитата(SABROG @  5.4.2010,  09:33 Найти цитируемый пост)
То есть если имя аргумента не совпадает с именем объявленным в определении функции, то соединение не работает?

нет. я предлагаю, чтобы внутри функции connect имя аргумента убиралось бы из сигнатуры сигнала. Т.е. чтобы функция connect работала бы примерно следующим образом:
Код

bool QObject::connect( QObject * senderObj, const char * signalSignature, const char * slotSignature )
{
    std::string signalSignature_p = remove_formal_parameters( signalSignature );
    std::string slotSignature_p = remove_formal_parameters( slotSignature );
    connect_internal( senderObj, signalSignature_p.c_str(), slotSignature_p.c_str() );
}


Это сообщение отредактировал(а) borisbn - 5.4.2010, 10:08


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
azesmcar
Дата 5.4.2010, 09:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 3
Всего: 211



Пожалуйста
Цитата

Dear Qt Team (или как вас там по имени и отчеству),

I am using QT for a while now and I noticed that a very frequent problem for novices is SLOT-SOCKET connection. The cause is always the same - forgot to remove formal parameter name when calling SIGNAL/SLOT macros. I want to suggest to make the connect/disconnect function a bit smarter and remove formal parameter name if it is necessary.

Regards,
Me


хотя и полностью согласен с
Цитата(boostcoder @  5.4.2010,  09:29 Найти цитируемый пост)
это целиком обязанность программиста


PM   Вверх
borisbn
Дата 5.4.2010, 10:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 48
Всего: 135



azesmcar, спасибо.

и всё же, разрешите немного по-hollywar'ить smile
boostcoderazesmcar, почему вы считаете, что умная функция connect хуже, чем каждый раз вручную удалять имена формальных параметров после копирования сигнатуры слота из h-ника ?

Это сообщение отредактировал(а) borisbn - 5.4.2010, 10:04


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
azesmcar
Дата 5.4.2010, 10:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 3
Всего: 211



borisbn

Я вообще считаю что эти сигнал/слоты надо выкинуть из Qt и сделать по человечески, как в boost.
По вопросу - без имени формальных параметров код будет чище и красивее. Пусть учатся убирать.

Это сообщение отредактировал(а) azesmcar - 5.4.2010, 10:07
PM   Вверх
SABROG
Дата 5.4.2010, 10:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 81
Всего: 91



Цитата(azesmcar @  5.4.2010,  10:07 Найти цитируемый пост)
Я вообще считаю что эти сигнал/слоты надо выкинуть из Qt и сделать по человечески, как в boost.

Сделайте, git репозиторий открыт для всех. Только ваш патч никто не примет. Сигналы boost не идеальны, как минимум они не поддерживают асинхронности и динамического подключения в runtime.

По теме. Предложите патч для moc компилятора или просто читайте документацию.

Это сообщение отредактировал(а) SABROG - 5.4.2010, 10:50


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
boostcoder
Дата 5.4.2010, 10:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 4
Всего: 110



Цитата(borisbn @  5.4.2010,  10:03 Найти цитируемый пост)
чем каждый раз вручную удалять имена формальных параметров после копирования сигнатуры слота из h-ника ?

я никогда не пишу имя аргумента в декларации.

Цитата(azesmcar @  5.4.2010,  10:07 Найти цитируемый пост)
Я вообще считаю что эти сигнал/слоты надо выкинуть из Qt и сделать по человечески, как в boost.

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

плюсов, я не вижу ни одного.
а минусов, как минимум два.
PM WWW   Вверх
azesmcar
Дата 5.4.2010, 10:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 3
Всего: 211



Цитата(SABROG @  5.4.2010,  10:49 Найти цитируемый пост)
Сделайте, git репозиторий открыт для всех

зачем мне это? платить мне за это никто не будет, так зачем тратить свое время?

Цитата(SABROG @  5.4.2010,  10:49 Найти цитируемый пост)
Сигналы boost не идеальны

что же тогда сказать о сигналах Qt? Все на макросах, малейшая ошибка и либо сигнал не ловится, либо программа вылетает. Никаких ошибок компиляции, сиди и ищи где что-то пропустил.
PM   Вверх
boostcoder
Дата 5.4.2010, 10:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 4
Всего: 110



Цитата(SABROG @  5.4.2010,  10:49 Найти цитируемый пост)
Сигналы boost не идеальны

нет ничего идеального smile 

Цитата(SABROG @  5.4.2010,  10:49 Найти цитируемый пост)
как минимум они не поддерживают асинхронности

кютешные сигналы/слоты, тоже. потому они обрабатываются в очереди событий(или как это в Qt зовется?). точно так же, это реализуется и с бустовыми сигналами, очередь обрабатывает boost::asio::io_service. реализовано, проверенно, работает.

Цитата(SABROG @  5.4.2010,  10:49 Найти цитируемый пост)
и динамического подключения в runtime.

приведите пример когда это необходимо? или когда это единственный способ решить задачу?
PM WWW   Вверх
SABROG
Дата 5.4.2010, 11:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 81
Всего: 91



Цитата(azesmcar @  5.4.2010,  10:52 Найти цитируемый пост)
Никаких ошибок

Все ошибки сыпятся в консоль во время выполнения.

Цитата(boostcoder @  5.4.2010,  10:55 Найти цитируемый пост)
приведите пример когда это необходимо? или когда это единственный способ решить задачу? 

.ui форма передается через сокет, правила соединения тоже в виде текстовой информации. Связывание происходит на клиентской машине.

Цитата(boostcoder @  5.4.2010,  10:55 Найти цитируемый пост)
или как это в Qt зовется?

Может быть тогда вам лучше изучить Qt, чем браться её обвинять?

Цитата(boostcoder @  5.4.2010,  10:55 Найти цитируемый пост)
очередь обрабатывает boost::asio::io_service

Покажите мне пример, где 2 объекта находящихся в разных потоках общаются между собой посредством boost::signals2 и boost::asio::io_service. Один объект посылает сигнал другому, не дожидаясь выполнения завершает свою работу, второй объект продолжает выполнять долгую задачу, например на секунд 10. Тогда я отстану.


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
azesmcar
Дата 5.4.2010, 11:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 3
Всего: 211



Цитата(SABROG @  5.4.2010,  11:06 Найти цитируемый пост)
Все ошибки сыпятся в консоль во время выполнения.

Вот именно. Но если это спор - то бессмысленный, я нв думаю что вы не считаете сигналы Qt идеальными. Я не говорил об использовании boost, я лишь сказал "сделать по человечески, как в boost". Это просто мое мнение, я не жалуюсь. Я считаю сигналы в Qt реализовали плохо.

Это сообщение отредактировал(а) azesmcar - 5.4.2010, 11:15
PM   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.1475 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.