LINUX.ORG.RU

QT4 и плагины


0

0

Всем доброго времени суток.
Не так давно вроде как обсуждалась тема насчёт динамической загрузки библиотеки или плагина http://www.linux.org.ru/view-message.jsp?msgid=3710639#comment-3712072 но там был простейший консольный пример. После мучений так и неполучилось это переделать в то что мне нужно... =(( Так вот нада сделать так чтобы библиотека содержала в себе например виджет, и динамически при загрузке этой библиотеки, в главное окно приложения из которого загружается эта библиотека добавлялся этот виджет =))

Ответ на: комментарий от Moskitos

Плагин:

#include<QLabel> extern "C" QWidget *loadme(){ return new QLabel("Hello, Qt!"); }

В основной программе dlopen(3), dlsym(3). Вызывайте loadme, получайте виджет и располагайте его, где душе угодно.

PS. Не по-кутешному, посикс-зависимо, зато безгеморройно, без тучи ненужного кода и без каких-либо проблем с бинарной совместимостью.

staseg ★★★★★
()
Ответ на: комментарий от staseg

Fixed:

#include<QLabel>
extern "C" QWidget *loadme(){
return new QLabel("Hello, Qt!");
}

staseg ★★★★★
()
Ответ на: комментарий от staseg

> PS. Не по-кутешному, посикс-зависимо, зато безгеморройно, без тучи ненужного кода и без каких-либо проблем с бинарной совместимостью.

А экземпляр объекта можно таким образом из плагина достать?

VoofT
()
Ответ на: комментарий от VoofT

>А экземпляр объекта можно таким образом из плагина достать?

>return new QLabel("Hello, Qt!");

И делайте с ним все, что хотите. Или о чем вы говорите, используя замысловатую формулировку "экземпляр объекта"? Про экземпляр класса только слышал, не силен в теории(.

staseg ★★★★★
()
Ответ на: комментарий от staseg

Это не то что хотел автор, хотя возможно он и сам не знает что хочет. В любом случае система плагинов Qt позволяет проверить подгружаемую библиотеку на совместимость с используемой версией Qt, обеспечить разделяемость интерфейса плагина, легко переключаться между статическими и динамическими плагинами, автоматическое кастирование обьекта интерфейса к нужному типу, чтобы убедиться что loadme() таки возвращает указатель на QLabel, а не QCheckBox. Повторюсь что лучше таки посмотреть пример, там совсем не так сложно как кажется сходу.

Dendy ★★★★★
()

Автор, делаешь интерфейсный метод, возвращающий QWidget*. Внутри плагина создаешь такой виджет и возвращаешь его. А обращаешься к нему из приложения. Консольное приложение легко можно превратитить в гуёвое.

irq
()
Ответ на: комментарий от irq

Спасибо попробую всё это воплотить в коде

Moskitos
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.