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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: сигналы и слоты  (Прочитано 6510 раз)
nixman05
Гость
« : Апрель 25, 2009, 20:04 »

Возможно ли определение сигнала/слота в классе не унаследованном от QObject ?
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #1 : Апрель 25, 2009, 20:19 »

нет
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
nixman05
Гость
« Ответ #2 : Апрель 25, 2009, 23:03 »

Как тогда решить следующую задачу :

 Есть несколько классов. У некоторых из них имеются общие родители в которых определены сигналы и слоты. Часть из этих классов имеют множественное наследование.
Но тогда у родителей будет общий родитель QObject. И возникает случай ромбовидного наследования, а данная ситуацию не поддерживается moc.

Можно ли как-нибудь обойти данную ситуацию?
 
Записан
ритт
Гость
« Ответ #3 : Апрель 26, 2009, 02:32 »

пересмотреть архитектуру приложения
Записан
vtl
Гость
« Ответ #4 : Апрель 27, 2009, 13:46 »

хм, а виртуальное наследование из C++ убрали что-ли?
Записан
Eugene Efremov
Гость
« Ответ #5 : Апрель 27, 2009, 14:43 »

хм, а виртуальное наследование из C++ убрали что-ли?
Виртуальное наследование ломает MOS. Иными словами — если QObject унаследовать виртуально, то оно повиснет на первом же сигнале (в лучшем случае).

Так что в данном контексте можно только посоветовать разнести функционал, использующий множественное наследование и функционал, использующий слоты/сигналы, по разным классам...
Записан
kitov
Гость
« Ответ #6 : Апрель 27, 2009, 22:45 »

Или как вариант использование не Qt signal/slot механизма , например из буста или самописного .
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #7 : Апрель 27, 2009, 23:14 »

есть ещё libsigc++
Записан
ритт
Гость
« Ответ #8 : Апрель 28, 2009, 01:00 »

вот моразм
Записан
nixman05
Гость
« Ответ #9 : Апрель 30, 2009, 20:10 »

хм, а виртуальное наследование из C++ убрали что-ли?
Виртуальное наследование ломает MOS. Иными словами — если QObject унаследовать виртуально, то оно повиснет на первом же сигнале (в лучшем случае).

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

Разнести функционал не получается...
В общем следующая ситуация: Исходные данные программа получает из двух источников файла и базы данных. Следовательно существуют два различных класса: один реализует работу с файлом, а другой с базой. У них есть общие сигналы и слоты которые выносятся в родительский класс. Также существует еще один вид данных которые сохраняются/загружаются отдельной сущностью, реализуемой еще одним классом (условие задачи). У этого класса  и у первого класса, взаимодействующего с данными также существуют общие слоты, которые необходимо вынести в родительский класс. Но при этом у родительских классов имеется общий предок QObject, что запрещает moc.

И как можно обойти данную ситуацию?

Записан
Eugene Efremov
Гость
« Ответ #10 : Апрель 30, 2009, 21:12 »

В общем следующая ситуация: Исходные данные программа получает из двух источников файла и базы данных. Следовательно существуют два различных класса: один реализует работу с файлом, а другой с базой. У них есть общие сигналы и слоты которые выносятся в родительский класс. Также существует еще один вид данных которые сохраняются/загружаются отдельной сущностью, реализуемой еще одним классом (условие задачи). У этого класса  и у первого класса, взаимодействующего с данными также существуют общие слоты, которые необходимо вынести в родительский класс. Но при этом у родительских классов имеется общий предок QObject, что запрещает moc.

По такому описанию посоветовать что-то конкретное довольно сложно.

Если в общих чертах — то можно попробовать разбить объекты на как можно более мелкие части, по возможности не связанные друг с другом. Вполне возможно, что после этого слоты разъедутся по разным объектам и для них можно будет организовать независимые друг от друга иерархии.

P.S. Советую поискать в сети книги: М. Файлер «Рефакторинг» и Э. Гамма и др. «Паттерны проектирования». Там как раз примерно про это...
Записан
ритт
Гость
« Ответ #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]   Вверх
  Печать  
 
Перейти в:  


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