Russian Qt Forum
Ноябрь 27, 2024, 01:31
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Общие вопросы
>
сигналы Combobox
Страниц:
1
[
2
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: сигналы Combobox (Прочитано 18171 раз)
waster
Гость
Re: сигналы Combobox
«
Ответ #15 :
Март 08, 2010, 16:59 »
Посмотри, может быть принимающий объект не унаследован от QObject. Иногда нужно сделать make clean или даже make distclean, и заново qmake && make, несмотря на наличие наследования в коде: такое иногда случается, если объект изначально не имел QObject-предков, потом их добавили, а объектники в силу каких-то причин остались старые (хотя так быть не должно).
Ещё попробуй переписать все connect'ы так, чтобы не было ui.comboBox, а были только прямые объекты и инициализация соединений внутри функций-членов класса, а не снаружи (для этого придётся унаследовать comboBox и создать ему что-то вроде функции setupSignals) - я сталкивался с вариантами, когда снаружи не работало, и кстати, это в любом случае нарушение инкапсуляции.
Но первым делом конечно, нужно запустить программу из командной строки и посмотреть, не ругается ли сама Qt на это соединение.
На тему как писать коннекты: пробелы лучше не ставить, но в любом случае надо писать всё в одном стиле, т.к. есть возможность потом пропарсить соединения, и они будут мешаться.
Записан
SABROG
Гость
Re: сигналы Combobox
«
Ответ #16 :
Март 08, 2010, 17:37 »
Цитата: waster от Март 08, 2010, 16:59
Ещё попробуй переписать все connect'ы так, чтобы не было ui.comboBox, а были только прямые объекты
Разницы не будет, moc'у нужны только внутренности SIGNAL()/SLOT(). Недавно обфускатором по коду прошелся, всё в лапшу превратил, кроме токенов SIGNAL()/SLOT() и того, что в скобках, ибо без них moc генерит ерунду.
Цитата: waster от Март 08, 2010, 16:59
и инициализация соединений внутри функций-членов класса, а не снаружи (для этого придётся унаследовать comboBox и создать ему что-то вроде функции setupSignals) - я сталкивался с вариантами, когда снаружи не работало, и кстати, это в любом случае нарушение инкапсуляции.
Вы каждый класс на базе QObject'a наследуете, чтобы не нарушать инкапсуляцию? Несмотря на то, что метод QObject::connect() статический, а класс QMetaObject вообще отдельная сущность от QObject'a, связь только через указатель.
Цитата: waster от Март 08, 2010, 16:59
На тему как писать коннекты: пробелы лучше не ставить, но в любом случае надо писать всё в одном стиле, т.к. есть возможность потом пропарсить соединения, и они будут мешаться.
В одном стиле с кем, с всемирным сообществом программистов Qt? В каком именно из стилей? Что означает слово "пропарсить", натравить утилиту normalize? И какие именно виды соединений будут мешаться, для пользователя это будет заметно?
Записан
waster
Гость
Re: сигналы Combobox
«
Ответ #17 :
Март 08, 2010, 17:43 »
Цитата: SABROG от Март 08, 2010, 17:37
Цитата: waster от Март 08, 2010, 16:59
Ещё попробуй переписать все connect'ы так, чтобы не было ui.comboBox, а были только прямые объекты
Разницы не будет, moc'у нужны только внутренности SIGNAL()/SLOT(). Недавно обфускатором по коду прошелся, всё в лапшу превратил, кроме токенов SIGNAL()/SLOT() и того, что в скобках, ибо без них moc генерит ерунду.
Цитата: waster от Март 08, 2010, 16:59
и инициализация соединений внутри функций-членов класса, а не снаружи (для этого придётся унаследовать comboBox и создать ему что-то вроде функции setupSignals) - я сталкивался с вариантами, когда снаружи не работало, и кстати, это в любом случае нарушение инкапсуляции.
Вы каждый класс на базе QObject'a наследуете, чтобы не нарушать инкапсуляцию? Несмотря на то, что метод QObject::connect() статический, а класс QMetaObject вообще отдельная сущность от QObject'a, связь только через указатель.
Цитата: waster от Март 08, 2010, 16:59
На тему как писать коннекты: пробелы лучше не ставить, но в любом случае надо писать всё в одном стиле, т.к. есть возможность потом пропарсить соединения, и они будут мешаться.
В одном стиле с кем, с всемирным сообществом программистов Qt? В каком именно из стилей? Что означает слово "пропарсить", натравить утилиту normalize? И какие именно виды соединений будут мешаться, для пользователя это будет заметно?
Тем не менее, пересборка проекта с очисткой объектников помогала в паре подобных случаев.
---
Да, каждый. Просто у меня 95% классов - кастомизируемые. Сначала не переопределял, а потом набрал статистику и понял, что для всех кастомизируемых виджетов удобнее это делать сразу, т.к. придётся всё-равно.
---
С собой, конечно
Представь особо умного программера из твоего team-а, который запустит grep на объекты из всех коннектов, не игнорирующий пробелы, и найдёт среднестатистическую половину...
Записан
SABROG
Гость
Re: сигналы Combobox
«
Ответ #18 :
Март 08, 2010, 18:07 »
Цитата: waster от Март 08, 2010, 17:43
Да, каждый. Просто у меня 95% классов - кастомизируемые. Сначала не переопределял, а потом набрал статистику и понял, что для всех кастомизируемых виджетов удобнее это делать сразу, т.к. придётся всё-равно.
Я так понимаю, что Вы унаследовали 95% всех виджетов Qt для своего проекта и переопределили paintEvent()? У вас вообще дизайнер не используется ни в каком виде? В слепую пишите интерфейс или сделали плагины для дизайнера на основе собственных классов?
Цитата: waster от Март 08, 2010, 17:43
Представь особо умного программера из твоего team-а, который запустит grep на объекты из всех коннектов, не игнорирующий пробелы, и найдёт среднестатистическую половину...
Особо умных программеров везде хватает, подстраиваться всем приходится под клиента, а уж удобно поддерживать нам проект или нет их не волнует, лишь бы работало, стабильно и быстро на сколько это вообще возможно.
Записан
garryHotDog
Гость
Re: сигналы Combobox
«
Ответ #19 :
Март 10, 2010, 18:57 »
Код:
connect(ui.comboBox1,SIGNAL(currentIndexChanged(int)),this,SLOT (slot_SimpleSlot(int)));
У меня работает!!!!
Записан
SABROG
Гость
Re: сигналы Combobox
«
Ответ #20 :
Март 10, 2010, 20:51 »
Надеюсь вызов слота slot_SimpleSlot() в момент запуска программы это то, что вам надо, так как сигнал currentIndexChanged() приходит сразу же как только запуститься программа. Если нужна реакция именно на выбор пользователя, то лучше использовать activated().
Записан
Страниц:
1
[
2
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...