Russian Qt Forum
Февраль 05, 2012, 19:41
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Общие вопросы
(Модератор:
Sergeich
) >
Доступ к основному окну из плагина
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Доступ к основному окну из плагина (Прочитано 1331 раз)
ExMagistr
Гость
Доступ к основному окну из плагина
«
:
Июнь 30, 2009, 12:59 »
Всем доброго времени суток!
Хочу написать приложение, расширяемое плагинами, в том числе дать доступ плагинам к элементам интерфейса основного окна, например к элементам ввода, меню и т.п. Во время выполнения, в момент вызова метода плагина, программа валится с ошибкой.
Для тестового примера:
Метод плагина:
Код:
void Plugin::writeString(MainWindow* win)
{
win->getEditor()->setText("Hello!");
}
где win->getEditor() возвращает указатель на элемент QLineEdit основного окна MainWindow. Текст ошибки:
Код:
symbol lookup error: /home/proffa/qt/testplugin/bin/plugin/libplugin.so: undefined symbol: _ZN10MainWindow9getEditorEv
Кто нибудь может подсказать, что не так сделано, и возможно ли вообще реализовать подобную идею? Может как-нидь по другому, не через плагины? Заранее спасибо.
P.S.: работаю под Ubuntu 9.04, Qt 4.5.1, исходники тестового пример:
http://narod.ru/disk/10435014000/testplugin.zip.html
Записан
Rcus
phpBB Супер
Offline
Сообщений: 1087
Twin-tail kidou senshi
Re: Доступ к основному окну из плагина
«
Ответ #1 :
Июнь 30, 2009, 13:25 »
/* Размышляет о работае компоновщика(линкера) и понимает как это неблагодарный труд... работаешь работаешь а о тебе никто не знает */
Прочитайте контракт с другой стороны: ваше приложение знает о плагинах, а как плагины узнают о приложении?
Записан
You Can Write FORTRAN in any Language (I Do)
Alex Custov
Хакер
Online
Сообщений: 677
Re: Доступ к основному окну из плагина
«
Ответ #2 :
Июнь 30, 2009, 13:29 »
плагин использует определение класса MainWindow, но не линкуется с его реализацией. По умолчанию многие линкеры позволяют оставлять undefined символы в библиотеке. Вставь
Цитировать
QMAKE_LFLAGS += -Wl,--no-undefined
в plugin.pro, и плагин перестанет компилироваться с такой же ошибкой. Нужно общий код, используемый программой и плагином (в данном случае класс MainWindow) выделить в одну библиотеку типа libMyProgramCommon, и линковать с ней и программу и плагин.
Записан
BRE
Джедай : наставник для всех
Online
Сообщений: 3034
Re: Доступ к основному окну из плагина
«
Ответ #3 :
Июнь 30, 2009, 13:34 »
Добавь в файл проекта самой программы:
QMAKE_LFLAGS += -Wl,-export-dynamic
Записан
SABROG
Гуру общения
Offline
Сообщений: 1424
Re: Доступ к основному окну из плагина
«
Ответ #4 :
Июнь 30, 2009, 14:26 »
Раз пошла такая пьянка по форумам отвечать 2 раза, то и я свои 5 копеек внесу
Код
C++ (Qt)
virtual
QLineEdit
*
getEditor
(
)
;
Записан
Национальная группа
Russian Federation
на QtCentre.
Qt: 4.7.2, GCC: 4.4.0
We'd get - widget!
ExMagistr
Гость
Re: Доступ к основному окну из плагина
«
Ответ #5 :
Июнь 30, 2009, 14:28 »
Спасибо за быстрый ответ
В свое оправдание хочу сказать, что имею лишь интуитивное понимание работы компоновщика\линкера и вообще всяких внутренних процессов и поэтому доля безграмотности проникла в мой вопрос
-
я наивно надеялся, что раз передаю указатель на участок памяти, значит получаю к нему полный доступ....
Цитата: BRE от Июнь 30, 2009, 13:34
Добавь в файл проекта самой программы:
QMAKE_LFLAGS += -Wl,-export-dynamic
Спасибо, для тестового примера помогло
теперь, если что, понятно, в какую сторону смотреть
Записан
SABROG
Гуру общения
Offline
Сообщений: 1424
Re: Доступ к основному окну из плагина
«
Ответ #6 :
Июнь 30, 2009, 14:29 »
Может тогда кто-нибудь выложит ключики и для MSVC?
Записан
Национальная группа
Russian Federation
на QtCentre.
Qt: 4.7.2, GCC: 4.4.0
We'd get - widget!
ExMagistr
Гость
Re: Доступ к основному окну из плагина
«
Ответ #7 :
Июнь 30, 2009, 14:35 »
Цитата: SABROG от Июнь 30, 2009, 14:26
Раз пошла такая пьянка по форумам отвечать 2 раза, то и я свои 5 копеек внесу
Код
C++ (Qt)
virtual
QLineEdit
*
getEditor
(
)
;
Ну я просто, чтоб наверняка, в двух форумах тему завел
Теперь целых два рабочих варианта
ну уж если теперь кто-нибудь не сочтет за труд подвести теоретическое обоснование корректности каждого из них
ну да же если и нет, теперь знаю про что теорию копать
Записан
SABROG
Гуру общения
Offline
Сообщений: 1424
Re: Доступ к основному окну из плагина
«
Ответ #8 :
Июнь 30, 2009, 14:39 »
Да это популярная
тема
на самом деле.
«
Последнее редактирование: Июнь 30, 2009, 14:42 от SABROG
»
Записан
Национальная группа
Russian Federation
на QtCentre.
Qt: 4.7.2, GCC: 4.4.0
We'd get - widget!
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> Печать
=> Интернационализация, локализация
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
=> Архив
===> Программирование
=====> Python
===> Веб программирование
=====> PHP, PERL, CGI
Загружается...