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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QWidget в библиотеке  (Прочитано 6190 раз)
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  )
{
   return new MyWidget ( parent );
}
В этом случае, при создании виджета необходимо создать QApplication в самой библиотеке.
Но и в этом случае, нельзя будет объявить родителя созданного виджета, т.к. он и его родитель будут находится в разных потоках.

Спасибо.

QT 4.3.1, OS Linux Mandriva
« Последнее редактирование: Сентябрь 06, 2007, 13:29 от BD » Записан
QCasper
Гость
« Ответ #1 : Сентябрь 06, 2007, 14:56 »

"т.к. он и его родитель будут находится в разных потоках" - это почему?
Записан
BD
Гость
« Ответ #2 : Сентябрь 06, 2007, 15:03 »

Цитировать
"т.к. он и его родитель будут находится в разных потоках" - это почему?
Я тоже не смог ответить на этот вопрос Улыбающийся
Просто при создании элемента приложение валится со словами Cannot set parent, new parent is in a different thread
Есть предположение, что при создании еще одного экземпляра QApplication, создается новый поток для него
« Последнее редактирование: Сентябрь 06, 2007, 15:07 от BD » Записан
Вячеслав
Гость
« Ответ #3 : Сентябрь 06, 2007, 15:55 »

А нафига в dll QApplication создавать ? Получай его как указатель из основной проги и усе ....
Записан
BD
Гость
« Ответ #4 : Сентябрь 06, 2007, 18:33 »

Можно пример, что надо сделать с указателем, после передачи его в dll?
Записан
Вячеслав
Гость
« Ответ #5 : Сентябрь 06, 2007, 20:24 »

Чего-то я стормозил  - есть
Код:
QCoreApplication * QCoreApplication::instance ()   [static] 
Returns a pointer to the application's QCoreApplication (or QApplication) instance.
И собственно только-что нос в стру прогу сунул -

Код:
QWidget *CreatePanel(QWidget *owner)
{
 return new StatusPanel(owner);
}
И работало-както правда это 4.1 но какая фиг разница ?
PS а instance нужен был чтоб транслятора подцепить .....
Записан
BD
Гость
« Ответ #6 : Сентябрь 07, 2007, 07:20 »

Так я так и не понял Улыбающийся
Указатель нужной QApplication получить \ отправить в библиотеку это не проблема
Вопрос в том, что надо с ним сделать, чтобы все виджеты, создаваемые в этой библиотеке, стали использовать этот указатель
Цитировать
И собственно только-что нос в стру прогу сунул -
Я в первом посте аналог написал, ничем не отличается Улыбающийся
Только тогда при попытке загрузить виджет из библиотеки он требует создать QApplication перед этим
Записан
Вячеслав
Гость
« Ответ #7 : Сентябрь 07, 2007, 09:06 »

Ты либу грузишь до создания QApp'a или после ? дай код загрузки глянуть .... И кстати - почему плагины не нравяться ?
Записан
BD
Гость
« Ответ #8 : Сентябрь 07, 2007, 10:17 »

После создания.
Цитировать
QDir pluginsDir = QDir ( qApp -> applicationDirPath()+"/plugins" );
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 ); // Здесь загрузка либы останавливается
        ...
    }
...
Кстати, либу надо грузить именно после создания QApp, т.к. приложение выгружаться не будет
Плагины нравятся во всем. Только, проблема в том, что они не работают в статической qt.

Записан
Dodge
Гость
« Ответ #9 : Сентябрь 07, 2007, 10:26 »

Мужики, зачем изобретать велосипед?... юзаем систему плагинов qt - дизайнера. см. маны по плагинам к дизайнеру.
Записан
BD
Гость
« Ответ #10 : Сентябрь 07, 2007, 10:39 »

Цитировать
юзаем систему плагинов qt
см. первый пост
Цитировать

использование плагинов невозможно, т.к. используются статическая QT
« Последнее редактирование: Сентябрь 07, 2007, 10:46 от BD » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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