Название: QWidget в библиотеке Отправлено: BD от Сентябрь 06, 2007, 13:21 Здравствуйте.
Необходимо чтобы приложение использовало, скажем, QWidget, находящийся в библиотеке ( чтобы запихнуть его на TabWidget хотя бы ) Есть какие-нибудь предложения? использование плагинов невозможно, т.к. используются статическая QT Поискал на форуме, везде предлагают что-то типа Цитировать #define EXPORT_WIDGET и extern "C" EXPORT_WIDGET QWidget * returnWidget ( QWidget * parent ); class EXPORT_WIDGET MyWidget : public QWidget { ... }; Цитировать QWidget * returnWidget ( QWidget * parent ) В этом случае, при создании виджета необходимо создать QApplication в самой библиотеке. { return new MyWidget ( parent ); } Но и в этом случае, нельзя будет объявить родителя созданного виджета, т.к. он и его родитель будут находится в разных потоках. Спасибо. QT 4.3.1, OS Linux Mandriva Название: Re: QWidget в библиотеке Отправлено: QCasper от Сентябрь 06, 2007, 14:56 "т.к. он и его родитель будут находится в разных потоках" - это почему?
Название: Re: QWidget в библиотеке Отправлено: BD от Сентябрь 06, 2007, 15:03 Цитировать "т.к. он и его родитель будут находится в разных потоках" - это почему? Я тоже не смог ответить на этот вопрос :) Просто при создании элемента приложение валится со словами Cannot set parent, new parent is in a different thread Есть предположение, что при создании еще одного экземпляра QApplication, создается новый поток для него Название: Re: QWidget в библиотеке Отправлено: Вячеслав от Сентябрь 06, 2007, 15:55 А нафига в dll QApplication создавать ? Получай его как указатель из основной проги и усе ....
Название: Re: QWidget в библиотеке Отправлено: BD от Сентябрь 06, 2007, 18:33 Можно пример, что надо сделать с указателем, после передачи его в dll?
Название: Re: QWidget в библиотеке Отправлено: Вячеслав от Сентябрь 06, 2007, 20:24 Чего-то я стормозил - есть
Код: QCoreApplication * QCoreApplication::instance () [static] Код: QWidget *CreatePanel(QWidget *owner) PS а instance нужен был чтоб транслятора подцепить ..... Название: Re: QWidget в библиотеке Отправлено: BD от Сентябрь 07, 2007, 07:20 Так я так и не понял :)
Указатель нужной QApplication получить \ отправить в библиотеку это не проблема Вопрос в том, что надо с ним сделать, чтобы все виджеты, создаваемые в этой библиотеке, стали использовать этот указатель Цитировать И собственно только-что нос в стру прогу сунул - Я в первом посте аналог написал, ничем не отличается :)Только тогда при попытке загрузить виджет из библиотеки он требует создать QApplication перед этим Название: Re: QWidget в библиотеке Отправлено: Вячеслав от Сентябрь 07, 2007, 09:06 Ты либу грузишь до создания QApp'a или после ? дай код загрузки глянуть .... И кстати - почему плагины не нравяться ?
Название: Re: QWidget в библиотеке Отправлено: BD от Сентябрь 07, 2007, 10:17 После создания.
Цитировать QDir pluginsDir = QDir ( qApp -> applicationDirPath()+"/plugins" ); Кстати, либу надо грузить именно после создания QApp, т.к. приложение выгружаться не будетforeach ( QString fileName, "/plugins" ) { QLibrary newPlugin ( pluginsDir.absoluteFilePath ( fileName ) ); typedef QWidget * ( *ReturnFunction ) ( QWidget * parent ); ReturnFunction plug = ( ReturnFunction ) newPlugin.resolve ( "returnWidget" ); if ( plug ) { QWidget * newTab = plug ( this ); // Здесь загрузка либы останавливается ... } ... Плагины нравятся во всем. Только, проблема в том, что они не работают в статической qt. Название: Re: QWidget в библиотеке Отправлено: Dodge от Сентябрь 07, 2007, 10:26 Мужики, зачем изобретать велосипед?... юзаем систему плагинов qt - дизайнера. см. маны по плагинам к дизайнеру.
Название: Re: QWidget в библиотеке Отправлено: BD от Сентябрь 07, 2007, 10:39 Цитировать юзаем систему плагинов qt см. первый постЦитировать использование плагинов невозможно, т.к. используются статическая QT |