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

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

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: сигналы Combobox  (Прочитано 18189 раз)
waster
Гость
« Ответ #15 : Март 08, 2010, 16:59 »

Посмотри, может быть принимающий объект не унаследован от QObject. Иногда нужно сделать make clean или даже make distclean, и заново qmake && make, несмотря на наличие наследования в коде: такое иногда случается, если объект изначально не имел QObject-предков, потом их добавили, а объектники в силу каких-то причин остались старые (хотя так быть не должно).

Ещё попробуй переписать все connect'ы так, чтобы не было ui.comboBox, а были только прямые объекты и инициализация соединений внутри функций-членов класса, а не снаружи (для этого придётся унаследовать comboBox и создать ему что-то вроде функции setupSignals) - я сталкивался с вариантами, когда снаружи не работало, и кстати, это в любом случае нарушение инкапсуляции.

Но первым делом конечно, нужно запустить программу из командной строки и посмотреть, не ругается ли сама Qt на это соединение.

На тему как писать коннекты: пробелы лучше не ставить, но в любом случае надо писать всё в одном стиле, т.к. есть возможность потом пропарсить соединения, и они будут мешаться.
Записан
SABROG
Гость
« Ответ #16 : Март 08, 2010, 17:37 »

Ещё попробуй переписать все connect'ы так, чтобы не было ui.comboBox, а были только прямые объекты
Разницы не будет, moc'у нужны только внутренности SIGNAL()/SLOT(). Недавно обфускатором по коду прошелся, всё в лапшу превратил, кроме токенов SIGNAL()/SLOT() и того, что в скобках, ибо без них moc генерит ерунду.

и инициализация соединений внутри функций-членов класса, а не снаружи (для этого придётся унаследовать comboBox и создать ему что-то вроде функции setupSignals) - я сталкивался с вариантами, когда снаружи не работало, и кстати, это в любом случае нарушение инкапсуляции.
Вы каждый класс на базе QObject'a наследуете, чтобы не нарушать инкапсуляцию? Несмотря на то, что метод QObject::connect() статический, а класс QMetaObject вообще отдельная сущность от QObject'a, связь только через указатель.

На тему как писать коннекты: пробелы лучше не ставить, но в любом случае надо писать всё в одном стиле, т.к. есть возможность потом пропарсить соединения, и они будут мешаться.
В одном стиле с кем, с всемирным сообществом программистов Qt? В каком именно из стилей? Что означает слово "пропарсить", натравить утилиту normalize? И какие именно виды соединений будут мешаться, для пользователя это будет заметно?
Записан
waster
Гость
« Ответ #17 : Март 08, 2010, 17:43 »

Ещё попробуй переписать все connect'ы так, чтобы не было ui.comboBox, а были только прямые объекты
Разницы не будет, moc'у нужны только внутренности SIGNAL()/SLOT(). Недавно обфускатором по коду прошелся, всё в лапшу превратил, кроме токенов SIGNAL()/SLOT() и того, что в скобках, ибо без них moc генерит ерунду.

и инициализация соединений внутри функций-членов класса, а не снаружи (для этого придётся унаследовать comboBox и создать ему что-то вроде функции setupSignals) - я сталкивался с вариантами, когда снаружи не работало, и кстати, это в любом случае нарушение инкапсуляции.
Вы каждый класс на базе QObject'a наследуете, чтобы не нарушать инкапсуляцию? Несмотря на то, что метод QObject::connect() статический, а класс QMetaObject вообще отдельная сущность от QObject'a, связь только через указатель.

На тему как писать коннекты: пробелы лучше не ставить, но в любом случае надо писать всё в одном стиле, т.к. есть возможность потом пропарсить соединения, и они будут мешаться.
В одном стиле с кем, с всемирным сообществом программистов Qt? В каком именно из стилей? Что означает слово "пропарсить", натравить утилиту normalize? И какие именно виды соединений будут мешаться, для пользователя это будет заметно?

Тем не менее, пересборка проекта с очисткой объектников помогала в паре подобных случаев.

---

Да, каждый. Просто у меня 95% классов - кастомизируемые. Сначала не переопределял, а потом набрал статистику и понял, что для всех кастомизируемых виджетов удобнее это делать сразу, т.к. придётся всё-равно.

---

С собой, конечно Улыбающийся

Представь особо умного программера из твоего team-а, который запустит grep на объекты из всех коннектов, не игнорирующий пробелы, и найдёт среднестатистическую половину...
Записан
SABROG
Гость
« Ответ #18 : Март 08, 2010, 18:07 »

Да, каждый. Просто у меня 95% классов - кастомизируемые. Сначала не переопределял, а потом набрал статистику и понял, что для всех кастомизируемых виджетов удобнее это делать сразу, т.к. придётся всё-равно.
Я так понимаю, что Вы унаследовали 95% всех виджетов Qt для своего проекта и переопределили paintEvent()? У вас вообще дизайнер не используется ни в каком виде? В слепую пишите интерфейс или сделали плагины для дизайнера на основе собственных классов?

Представь особо умного программера из твоего team-а, который запустит grep на объекты из всех коннектов, не игнорирующий пробелы, и найдёт среднестатистическую половину...

Особо умных программеров везде хватает, подстраиваться всем приходится под клиента, а уж удобно поддерживать нам проект или нет их не волнует, лишь бы работало, стабильно и быстро на сколько это вообще возможно.
Записан
garryHotDog
Гость
« Ответ #19 : Март 10, 2010, 18:57 »

Код:
connect(ui.comboBox1,SIGNAL(currentIndexChanged(int)),this,SLOT (slot_SimpleSlot(int)));
У меня работает!!!!
Записан
SABROG
Гость
« Ответ #20 : Март 10, 2010, 20:51 »

Надеюсь вызов слота slot_SimpleSlot() в момент запуска программы это то, что вам надо, так как сигнал currentIndexChanged() приходит сразу же как только запуститься программа. Если нужна реакция именно на выбор пользователя, то лучше использовать activated().
Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


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