Russian Qt Forum
Ноябрь 25, 2024, 20:23
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Общие вопросы
>
сигналы и слоты
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: сигналы и слоты (Прочитано 6575 раз)
nixman05
Гость
сигналы и слоты
«
:
Апрель 25, 2009, 20:04 »
Возможно ли определение сигнала/слота в классе не унаследованном от QObject ?
Записан
pastor
Administrator
Джедай : наставник для всех
Offline
Сообщений: 2901
Re: сигналы и слоты
«
Ответ #1 :
Апрель 25, 2009, 20:19 »
нет
Записан
Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
nixman05
Гость
Re: сигналы и слоты
«
Ответ #2 :
Апрель 25, 2009, 23:03 »
Как тогда решить следующую задачу :
Есть несколько классов. У некоторых из них имеются общие родители в которых определены сигналы и слоты. Часть из этих классов имеют множественное наследование.
Но тогда у родителей будет общий родитель QObject. И возникает случай ромбовидного наследования, а данная ситуацию не поддерживается moc.
Можно ли как-нибудь обойти данную ситуацию?
Записан
ритт
Гость
Re: сигналы и слоты
«
Ответ #3 :
Апрель 26, 2009, 02:32 »
пересмотреть архитектуру приложения
Записан
vtl
Гость
Re: сигналы и слоты
«
Ответ #4 :
Апрель 27, 2009, 13:46 »
хм, а виртуальное наследование из C++ убрали что-ли?
Записан
Eugene Efremov
Гость
Re: сигналы и слоты
«
Ответ #5 :
Апрель 27, 2009, 14:43 »
Цитата: vtl от Апрель 27, 2009, 13:46
хм, а виртуальное наследование из C++ убрали что-ли?
Виртуальное наследование ломает MOS. Иными словами — если
QObject
унаследовать виртуально, то оно повиснет на первом же сигнале (в лучшем случае).
Так что в данном контексте можно только посоветовать разнести функционал, использующий множественное наследование и функционал, использующий слоты/сигналы, по разным классам...
Записан
kitov
Гость
Re: сигналы и слоты
«
Ответ #6 :
Апрель 27, 2009, 22:45 »
Или как вариант использование не Qt signal/slot механизма , например из буста или самописного .
Записан
Alex Custov
Джедай : наставник для всех
Offline
Сообщений: 2063
Re: сигналы и слоты
«
Ответ #7 :
Апрель 27, 2009, 23:14 »
есть ещё libsigc++
Записан
ритт
Гость
Re: сигналы и слоты
«
Ответ #8 :
Апрель 28, 2009, 01:00 »
вот моразм
Записан
nixman05
Гость
Re: сигналы и слоты
«
Ответ #9 :
Апрель 30, 2009, 20:10 »
Цитата: Eugene Efremov от Апрель 27, 2009, 14:43
Цитата: vtl от Апрель 27, 2009, 13:46
хм, а виртуальное наследование из C++ убрали что-ли?
Виртуальное наследование ломает MOS. Иными словами — если
QObject
унаследовать виртуально, то оно повиснет на первом же сигнале (в лучшем случае).
Так что в данном контексте можно только посоветовать разнести функционал, использующий множественное наследование и функционал, использующий слоты/сигналы, по разным классам...
Разнести функционал не получается...
В общем следующая ситуация: Исходные данные программа получает из двух источников файла и базы данных. Следовательно существуют два различных класса: один реализует работу с файлом, а другой с базой. У них есть общие сигналы и слоты которые выносятся в родительский класс. Также существует еще один вид данных которые сохраняются/загружаются отдельной сущностью, реализуемой еще одним классом (условие задачи). У этого класса и у первого класса, взаимодействующего с данными также существуют общие слоты, которые необходимо вынести в родительский класс. Но при этом у родительских классов имеется общий предок QObject, что запрещает moc.
И как можно обойти данную ситуацию?
Записан
Eugene Efremov
Гость
Re: сигналы и слоты
«
Ответ #10 :
Апрель 30, 2009, 21:12 »
Цитата: nixman05 от Апрель 30, 2009, 20:10
В общем следующая ситуация: Исходные данные программа получает из двух источников файла и базы данных. Следовательно существуют два различных класса: один реализует работу с файлом, а другой с базой. У них есть общие сигналы и слоты которые выносятся в родительский класс. Также существует еще один вид данных которые сохраняются/загружаются отдельной сущностью, реализуемой еще одним классом (условие задачи). У этого класса и у первого класса, взаимодействующего с данными также существуют общие слоты, которые необходимо вынести в родительский класс. Но при этом у родительских классов имеется общий предок QObject, что запрещает moc.
По такому описанию посоветовать что-то конкретное довольно сложно.
Если в общих чертах — то можно попробовать разбить объекты на как можно более мелкие части, по возможности не связанные друг с другом. Вполне возможно, что после этого слоты разъедутся по разным объектам и для них можно будет организовать независимые друг от друга иерархии.
P.S.
Советую поискать в сети книги: М. Файлер «Рефакторинг» и Э. Гамма и др. «Паттерны проектирования». Там как раз примерно про это...
Записан
ритт
Гость
Re: сигналы и слоты
«
Ответ #11 :
Апрель 30, 2009, 23:31 »
что мешает сделать
Код:
class MyClass : public Object1
{
Q_OBJECT
public:
<snip>
private:
Object2* m_obj;
?
а то и вообще Object2 сделать защищённым (protected) членом класса Object1 и опционально сделать Object1 другом Object2. тогда MyClass будет иметь доступ к методам Object(1|2) и даже сможет использовать сигналы обоих.
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
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 сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...