Название: qobject_cast не работает Отправлено: Авварон от Июль 30, 2010, 21:07 Задался целью написать систему плагинов. Но вот беда - не могу скастать класс к IPlugin:
такой код: Код: TestPlugin::TestPlugin() При этом динамик каст срабатывает и метаметоды IPlugin'а вызываются. Использую cmake, может в этом дело? (хотя другой проект спокойно использует плагины) Название: Re: qobject_cast не работает Отправлено: ilyagoo от Июль 30, 2010, 21:44 Q_OBJECT в определении класса не забыл?
Название: Re: qobject_cast не работает Отправлено: Авварон от Июль 30, 2010, 21:48 нет все на месте, мета методы же вызываются и инхеритс срабатывает
added: сделал проект на кумейке, там каст пашет. Идеи? Название: Re: qobject_cast не работает Отправлено: Sancho_s_rancho от Июль 30, 2010, 22:19 Вот одного я не пойму. Зачем в конструкторе плагинного класса приводить к интерфейсу. Это же делается в менеджере плагинов.
Название: Re: qobject_cast не работает Отправлено: Авварон от Июль 30, 2010, 22:28 да, делается, но там не заработало (ЛибаА->ЛибаБ->ЛибаА) и я решил проверить более простой варинт (ЛибаА->ЛибаБ). Методом тыка выяснилсоь что либа сделанная симейком цепляется как плагин к бинарнику собранному кумейком. А вот симейковский бинарь кривой (что там вообще может быть такое??)
аддед: наврал, оба кривые Название: Re: qobject_cast не работает Отправлено: asvil от Июль 31, 2010, 06:25 Код: # PLUGIN COMPILATION Название: Re: qobject_cast не работает Отправлено: Wicked_Digger от Июль 31, 2010, 07:48 qobject_cast будет работать только если IPlugin отнаследован от QObject, а это не так, насколько я понял.
Название: Re: qobject_cast не работает Отправлено: Sancho_s_rancho от Июль 31, 2010, 11:45 Проще всего решить проблему заглянув в examples. Первый свой плагин писал с оглядкой на пример из Qt и с приведением не было проблем.
Название: Re: qobject_cast не работает Отправлено: Авварон от Июль 31, 2010, 12:06 сказал же, тот же код собранный кумейком, работает
Филоненко Михаил есть эти макросы, да и не в них дело проблему решил - дело было в структуре папок (в кратце - почему-то qt4_wrap_cpp( MOC_SOURCES ${HEADERS} ) не занулял MOC_SOURCES и ни брались дополнитьльно с верхнего уровня (и видимо оказывали влияние на линковку) Сделал так: Код: set( MOC_SOURCES "" ) Название: Re: qobject_cast не работает Отправлено: Sancho_s_rancho от Июль 31, 2010, 14:00 сказал же, тот же код собранный кумейком, работает Извини, пропустил.Кстати. я заметил странную тягу к CMake. Много проектов на Qt за каким-то прикручивают CMake. Просто прикручивают "чтобы было", а потом героически борются с возникшими трудностями. Одно время Qt-шники сами вроде грозились перейти на cmake. Но кроме заявлений и _базовой_ поддержки в креаторе я сдвигов не заметил. Так зачем все эти жертвы? Название: Re: qobject_cast не работает Отправлено: asvil от Июль 31, 2010, 17:40 Так зачем все эти жертвы? 1. Очень легко указывать что и куда инсталлировать, а потом и системо-зависимый инсталлятор создать. Да и деинсталляция не сложна.2. Очень легко настроить что и куда собирать и с какими префиксами, постфиксами в зависимости от типа сброки (release, debug, ...). 3. Очень легко найти нужную библиотеку в системе, запустить нужную команду. 4. Можно использовать moc без лишних телодвижений. И для приватных слотов в том числе, когда сгенерированный мета-класс включается в единицу компляции исходного класса (#include "someclass.moc"). Может не правильно выразился... 5. Документированность гораздо лучше. А вот этот принцип Code Less. для qmake и не только не очень-то, на мой взгляд, хорош. Можно ли быстро в qmake проекте сделать генерацию исходных текстов или еще чего-либо и включить сгенерированные файлы в текущую цель (или отдельной библиотекой собрать)? А сами CMake'овцы рассказывают, показывают. Из минусов только один мне встретившийся: Нет красивой работы с файлами переводов. Название: Re: qobject_cast не работает Отправлено: Sancho_s_rancho от Август 01, 2010, 00:02 Так зачем все эти жертвы? 1. Очень легко указывать что и куда инсталлировать, а потом и системо-зависимый инсталлятор создать. Да и деинсталляция не сложна.2. Очень легко настроить что и куда собирать и с какими префиксами, постфиксами в зависимости от типа сброки (release, debug, ...). 3. Очень легко найти нужную библиотеку в системе, запустить нужную команду. 4. Можно использовать moc без лишних телодвижений. И для приватных слотов в том числе, когда сгенерированный мета-класс включается в единицу компляции исходного класса (#include "someclass.moc"). Может не правильно выразился... 5. Документированность гораздо лучше. А вот этот принцип Code Less. для qmake и не только не очень-то, на мой взгляд, хорош. Можно ли быстро в qmake проекте сделать генерацию исходных текстов или еще чего-либо и включить сгенерированные файлы в текущую цель (или отдельной библиотекой собрать)? А сами CMake'овцы рассказывают, показывают. Из минусов только один мне встретившийся: Нет красивой работы с файлами переводов. 2. Не совсем понял. Если речь о дефайнах и условиях всяких,то это все есть в qmake. Если речь идет о том, как исполнимый файл назвать и куда запихнуть, то не интересовался особо. Вероятно это кому-то нужно. 3. Не понятно зачем системе сборки для вас искать какую-то библиотеку. Открываешь менеджер пакетов и говоришь ему установить devel пакет такой-то библиотеки. Это телодвижения разработчика. А пользователь просто ставит rpm или deb, в котором все зависимости должны быть указаны. 4. Не приходилось. Вероятно это кому-то нужно. 5. Не совсем понял. Вы бы не могли какой-нибудь пример из жизни привести. Название: Re: qobject_cast не работает Отправлено: break от Август 01, 2010, 00:50 Цитировать Так зачем все эти жертвы? Обсуждалось сотню раз - главная причина более правильная работа с зависимостями - cmake сможет корректно определить какую часть сложного проекта надо пересобрать при изменении скажем h файла в одной из зависимых либ (а это изменение может быть очень плачевным т.к. размер структур может поменяться). Мы в своем проекте после перехода на cmake правктическ4и перестали делать полный rebuild - до этого это приходилось делать каждый раз после серьезных коммитов товарищей... Подробнее о проблеме qmake профи с этого форума обсуждали здесь: http://www.prog.org.ru/topic_11935_0.html особенно начиная с этих постов http://www.prog.org.ru/index.php?topic=11935.msg74785#msg74785 http://www.prog.org.ru/index.php?topic=11935.msg74806#msg74806 http://www.prog.org.ru/index.php?topic=11935.msg74841#msg74841 http://www.prog.org.ru/index.php?topic=11935.msg74851#msg74851 http://www.prog.org.ru/index.php?topic=11935.msg74861#msg74861 Так что переходить однозначно стоит (особенно для сложного проекта состоящего из большого количества подпроектов - просто либ и плагинов) - по своим ощущениям скажу работать в QtCreator хуже не стало - все абсолютно также, кроме того при грамотном подходе можно сделать так что файлы подпроектов будет организовывать очень удобно т.к. cmake целый язык со своими функциями - где можно устранять дублирование кода для подпроектов... Название: Re: qobject_cast не работает Отправлено: asvil от Август 01, 2010, 11:11 Пример из жизни, для пятого пункта.
Необходимо в процессе сборки проекта, сгенерировать классы-обертки для QtScript с помощью QtScriptGenerator. Затем включить полученные файлы в проект. Включать можно как в виде динамического/статического Qt плагина, так и непосредственно в получаемый runtime. А собственно переформулированный пятый пункт: документация по qmake скудна. Название: Re: qobject_cast не работает Отправлено: Авварон от Август 01, 2010, 19:18 4. Можно использовать moc без лишних телодвижений. И для приватных слотов в том числе, когда сгенерированный мета-класс включается в единицу компляции исходного класса (#include "someclass.moc"). Может не правильно выразился...
[/quote] по-подробнее плз, я как раз решения не нашел Название: Re: qobject_cast не работает Отправлено: asvil от Август 01, 2010, 19:34 по-подробнее плз, я как раз решения не нашел Код: # здесь c++ файлы содержащие include "*.moc" Название: Re: qobject_cast не работает Отправлено: Авварон от Август 01, 2010, 20:09 а, ясно, я qt4_automoc неправильно использовал:) Спасибо
|