![]() |
|
![]() ![]() ![]() |
|
kuvshinka |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 386 Регистрация: 27.4.2008 Репутация: нет Всего: нет |
Подскажите пож-та (пример объявления и описания) каким образом можно создать сигнал (соответственно и слот) с параметром, в качестве значения которого я могла бы передавать экземпляр какого-либо (т. е. произвольного) класса (просто достаточно много надо переслать данных из одного класса(ов) в другой и хочется сделать минимальное число коннектов - в идеале один-"универсальный")...
Это сообщение отредактировал(а) kuvshinka - 25.4.2012, 19:48 |
|||
|
||||
borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 48 Всего: 135 |
коротко - никак
signal/slot-система в Qt не предусматривает шаблонов Си++ в принципе -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 7 Всего: 250 |
kuvshinka, QVariant..
Это сообщение отредактировал(а) mes - 25.4.2012, 22:46 |
|||
|
||||
kuvshinka |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 386 Регистрация: 27.4.2008 Репутация: нет Всего: нет |
borisbn - под словом "шаблон" я имела ввиду скорее не С++-ный шаблон, а скорее название, подразумевающее под собой возможность задания в качестве параметра слота/сигнала значений разного "типа" (объекты разных классов)...
mes - подскажите пож-та на примере(объявление и описание сигнала и слота)!!! |
|||
|
||||
math64 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 23 Всего: 72 |
вообще-то можно и с template:
|
|||
|
||||
kuvshinka |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 386 Регистрация: 27.4.2008 Репутация: нет Всего: нет |
math64: не совсем поняла Ваш пример:
1. AnyBase - это класс-отправитель сообщения(экземпляра класса) или кто ? если да, то что же получается: так как разных отправителей у меня много (с десяток), то все их мне надо перечислить в объявлении шаблона Any ? то есть ...public AnyBase, klass1, klass2... 2. зачем создавать T* m_t;? поясните по-простому Ваш пример... mes: подскажите пример с QVariant.... |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 7 Всего: 250 |
обычный сигнал, только в аргументе Вариант.. http://qt-project.org/doc/qt-4.8/QVariant.html Вы лучше свою задачу опишите, тогда можно будет более точно подсказать подходящее решение.. |
|||
|
||||
kuvshinka |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 386 Регистрация: 27.4.2008 Репутация: нет Всего: нет |
mes: задача следующая (просьба дать пример решения!!!):
Есть отдельный файл (хедер) с описанием классов M1, M2, M3 в MainClass создаются объекты классов A,B, и C... в классе А создаются объекты классов A1, A2, A3, A4, в классе В - объекты классов B1, B2... Задача: допустим в классе A2 создаются объекты классов M1, M3, в разных местах А2-класса они заполняются данными и их надо поочередно отправить в класс C (слот)...понятно, что это можно сделать коннектом в MainClass, соединив сигнал из A2 со слотом класса С с параметром типа М1, а потом и с М3, но так как таких передач (допустим из B1 отослать M2 в класс C) достаточно много, то и коннектов будет много, а хотелось бы как-то это соптимизировать ...пункт назначения всегда один - слот класса С, но вот как его параметр сделать универсальным (экземпляром произвольного М-класса ( но их перечень я знаю))? |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 7 Всего: 250 |
и что это в итоге должно быть ?
|
|||
|
||||
baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: нет Всего: 101 |
kuvshinka, "отправить в класс X" нельзя, можно отправить сообщение объекту типа Х. но это к слову...
mes прав: задачу Вы таки не описали. но раз уж объект типа С (видимо посредством одной функции) умеет принимать объекты разных типов, то либо все эти типы наследуются от одного, и этот тип принимает объект С, либо С имеет несколько функций с разным типом параметров. И в любом случае С осведомлен об интерфейсе всех типов объектов, с которыми взаимодействует. так что вопрос про задачу остается актуальным ![]() Это сообщение отредактировал(а) baldina - 26.4.2012, 22:56 |
|||
|
||||
kuvshinka |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 386 Регистрация: 27.4.2008 Репутация: нет Всего: нет |
mes: что значит "что это в итоге должно быть"? надо осуществить передачу данных класса Мх из классов Ахх, Вхх в общий для них всех слот класса С...Писать для каждого конкретного Мх-сообщения свой коннект нежелательно - их будет достаточно много и отличаться они будут только отправителем и типом параметра(передаваемым объектом класса)...
baldina - так я про это и спрашиваю как сделать так, чтобы один слот (класса С) умел бы принимать объекты разных типов, унаследовать все Мх-классы от одного нельзя по заданию, они все независимы друг от друга (но наверное можно сделать их какое-то перечисление или что-тло в этом роде), но мне как раз и не надо, чтобы класс "С имел бы несколько функций с разным типом параметров" (в этом варианте все ясно - много коннектов под каждый объект класса Мх) |
|||
|
||||
math64 |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 23 Всего: 72 |
Это класс-обёртка, в который можно завенуть любой класс. Если Выши классы унаследованы от одного класса (например QObject), то класс обёртка не нужен, передавайте в параметре сигнала QObject* На самом деле немного сложнее.
|
||||
|
|||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 7 Всего: 250 |
тогда и ответ такой же : приведите все Mx к полиморфному виду (в любой из вариаций : общий базовый класс, вариант , (сериализованная) строка и т.д. ) и передавайте.. Большей конкретики по озвученому заданию дать не представляется возможным .. Более того полагаю что ошибка проектирования закралась у Вас гораздо глубже, в той части что Вы по партизански скрываете.. Добавлено @ 11:41 немножко сложнее сделать класс "запихиваемым" в Вариант, а не сделать сигнал ![]() и плюс.. что то мне подсказывает, что задача тс решается гораздо проще, чем тс ее описывает.. Добавлено @ 11:46 так приведите М-сообщение к динамичному виду и дальше передавайте его как вздумается ![]() Это сообщение отредактировал(а) mes - 27.4.2012, 11:49 |
|||
|
||||
baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: нет Всего: 101 |
kuvshinka, один вопрос. Допустим объект класса С умеет получать в одной функции объекты разных типов, неважно как, но например посредством QVariant. Что дальше? В смысле, как объект С будет с ними работать? Еще точнее - что ему требуется делать с этими объектами?
Думаю, если Вы сможете ответить на этот вопрос, то ответа на вопрос "как именно" использовать QVariant не потребуется ![]() |
|||
|
||||
baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: нет Всего: 101 |
прочитал еще раз - почудилась тень сериализации все-таки я поддерживаю mes, попартизанили и хватит. расскажите нам все ![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |