Russian Qt Forum
Ноябрь 25, 2024, 07:35
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Пользовательский интерфейс (GUI)
>
Внедрение интерфейса одного приложения внутрь другого.
Страниц: [
1
]
2
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Внедрение интерфейса одного приложения внутрь другого. (Прочитано 16312 раз)
far-far
Гость
Внедрение интерфейса одного приложения внутрь другого.
«
:
Ноябрь 13, 2009, 14:50 »
Подскажите, решал ли кто-нибудь задачу: внедрение окна одного приложения внутрь другого. Нужно что-то подобное ActiveX, только мультиплатформенное.
Исходная задача такая. Есть "Главная программа" на подобие Eclipse, она должна для каждого вида документа запускать дочерние программы для просмотра/редактирования. При этом окна дочерних программ должны располагаться в пределах окна "Главной программы". И "Главная программа" и дочерние пишутся на QT.
Записан
whirlwind
Гость
Re: Внедрение интерфейса одного приложения внутрь другого.
«
Ответ #1 :
Ноябрь 13, 2009, 15:26 »
http://qt.nokia.com/doc/4.5/plugins-howto.html
Создать плагин с двумя методами. Один метод просто возвращает список поддерживаемых расширений файлов. Второй получает имя файла и отдает *QWidget -- окно с открытым файлом
Основная программа просто получает окна-виджеты и располагает их как надо.
Записан
jack_r
Гость
Re: Внедрение интерфейса одного приложения внутрь другого.
«
Ответ #2 :
Ноябрь 13, 2009, 15:40 »
Я пытался найти решение такой задачи, но не нашел непосредственного решения. Поэтому я применил те средства, что есть у Qt. Для этого в одно приложении я добавил контейнер для хранения окна внедряемого приложения. А на основе внедряемого приложения создал виджет. В моем случае на основе библиотек внедряемого приложения. И затем просто отображал в контейнере главного приложения виджет встраиваемого приложения. Контейнером может быть что угодно, в вашем случае подойдет QMdiArea.
Записан
far-far
Гость
Re: Внедрение интерфейса одного приложения внутрь другого.
«
Ответ #3 :
Ноябрь 13, 2009, 15:40 »
Согласен, можно использовать Qt-plugin. Возможно так и сделаю. Однако по Т.З. дочерние программы должны существовать в виде отдельных приложений, что бы их можно было независимо, от главного приложения, запускать. При использовании Qt-plugin придется реализовать всю функциональность в plugin, который будет одновременно использоваться и в главном приложении и в дочернем, которое будет просто обёрткой.
Записан
far-far
Гость
Re: Внедрение интерфейса одного приложения внутрь другого.
«
Ответ #4 :
Ноябрь 13, 2009, 15:49 »
Цитата: jack_r от Ноябрь 13, 2009, 15:40
Я пытался найти решение такой задачи, но не нашел непосредственного решения. Поэтому я применил те средства, что есть у Qt. Для этого в одно приложении я добавил контейнер для хранения окна внедряемого приложения. А на основе внедряемого приложения создал виджет. В моем случае на основе библиотек внедряемого приложения. И затем просто отображал в контейнере главного приложения виджет встраиваемого приложения. Контейнером может быть что угодно, в вашем случае подойдет QMdiArea.
На сколько я понял, вы на уровне исходных кодов использовали один и тот же виджет в двух разных приложения?
Мне хотелось бы обеспечить внедрение именно бинарного запускаемого файла.
Я частично решил задачу.
Сейчас я посылаю из главного приложения дочернему посредством вызова QProcess.write() для записи команд в консоль дочернего приложения команды выравнивания окна относительно родительского.
Записан
zenden
Гость
Re: Внедрение интерфейса одного приложения внутрь другого.
«
Ответ #5 :
Ноябрь 13, 2009, 16:44 »
А как такое реализуют программы-фронтенды, к примеру как SMPLayer встраивает в себя Mplayer??
Записан
jasf
Гость
Re: Внедрение интерфейса одного приложения внутрь другого.
«
Ответ #6 :
Ноябрь 13, 2009, 16:50 »
А мне кажется, что проще заifdefить код под каждую из платформ.
В виндовс это реализовать, на сколько я помню, предельно просто. Получаем хэндл нужного окна и устанавливаем ему parent. Когда я этим игрался, мог кнопку пуск засунуть в панель быстрого запуска тотал коммандера
ещё прикольно было засунуть окно milkdrop winampа (визуализатор) куда-нибудь. например на рабочий стол или в любой диалог. получался такой DreamScene под Xp
теми же 2мя строками кода. Думаю под линуксом, маком такое API тоже есть. Платформ не так уж и много..
Записан
west
Гость
Re: Внедрение интерфейса одного приложения внутрь другого.
«
Ответ #7 :
Ноябрь 14, 2009, 14:54 »
Прикольная задачка, под линукс у меня, кстати не особо получилось, только методами, типа как автор поста описал. Решал кто-нибудь тему под *nix? Если не жаль, скинте идею. (Я пытался через иксовые функции сделать)
Записан
BRE
Гость
Re: Внедрение интерфейса одного приложения внутрь другого.
«
Ответ #8 :
Ноябрь 14, 2009, 15:48 »
Цитата: west от Ноябрь 14, 2009, 14:54
Прикольная задачка, под линукс у меня, кстати не особо получилось, только методами, типа как автор поста описал. Решал кто-нибудь тему под *nix? Если не жаль, скинте идею. (Я пытался через иксовые функции сделать)
В KDE есть технология KPart, в GNOME - Bonobo.
http://ru.wikipedia.org/wiki/KParts
«
Последнее редактирование: Ноябрь 14, 2009, 15:50 от BRE
»
Записан
Alex Custov
Джедай : наставник для всех
Offline
Сообщений: 2063
Re: Внедрение интерфейса одного приложения внутрь другого.
«
Ответ #9 :
Ноябрь 14, 2009, 16:13 »
Цитата: BRE от Ноябрь 14, 2009, 15:48
Цитата: west от Ноябрь 14, 2009, 14:54
Прикольная задачка, под линукс у меня, кстати не особо получилось, только методами, типа как автор поста описал. Решал кто-нибудь тему под *nix? Если не жаль, скинте идею. (Я пытался через иксовые функции сделать)
В KDE есть технология KPart, в GNOME - Bonobo.
http://ru.wikipedia.org/wiki/KParts
KParts это плагины, не подходит
Записан
Alex Custov
Джедай : наставник для всех
Offline
Сообщений: 2063
Re: Внедрение интерфейса одного приложения внутрь другого.
«
Ответ #10 :
Ноябрь 14, 2009, 16:19 »
Цитата: west от Ноябрь 14, 2009, 14:54
Прикольная задачка, под линукс у меня, кстати не особо получилось, только методами, типа как автор поста описал. Решал кто-нибудь тему под *nix? Если не жаль, скинте идею. (Я пытался через иксовые функции сделать)
Под иксы ВНЕЗАПНО решение такое же - через XReparentWindow. Там будут ещё ньюансы типа фокуса, поэтому разработана небольшая надстрока -
XEmbed
. В Qt есть классы для этого - QX11EmbedContainer, QX11EmbedWidget. Там тоже всё просто, и плагины будут существовать как отдельные приложения. Это сильно поможет для создания сверхнадёжных плагинных интерфейсов (падает плагин - программа прололжает работать, и даже может попробовать его перезапустить). В Chrome я думаю используется что-то подобное.
Записан
andrew.k
Гость
Re: Внедрение интерфейса одного приложения внутрь другого.
«
Ответ #11 :
Октябрь 28, 2010, 16:26 »
Цитата: Alex Custov от Ноябрь 14, 2009, 16:19
Цитата: west от Ноябрь 14, 2009, 14:54
Прикольная задачка, под линукс у меня, кстати не особо получилось, только методами, типа как автор поста описал. Решал кто-нибудь тему под *nix? Если не жаль, скинте идею. (Я пытался через иксовые функции сделать)
Под иксы ВНЕЗАПНО решение такое же - через XReparentWindow. Там будут ещё ньюансы типа фокуса, поэтому разработана небольшая надстрока -
XEmbed
. В Qt есть классы для этого - QX11EmbedContainer, QX11EmbedWidget. Там тоже всё просто, и плагины будут существовать как отдельные приложения. Это сильно поможет для создания сверхнадёжных плагинных интерфейсов (падает плагин - программа прололжает работать, и даже может попробовать его перезапустить). В Chrome я думаю используется что-то подобное.
Удалось получить нужный результат?
Записан
vertus
Гость
Re: Внедрение интерфейса одного приложения внутрь другого.
«
Ответ #12 :
Октябрь 19, 2011, 08:38 »
Мне удалось используя QX11EmbedContainer и QX11EmbedWidget.
В итоге когда надо приложение встраивается внутрь другого интерфейса, а когда надо запускается отдельным окном.
Записан
andrew.k
Гость
Re: Внедрение интерфейса одного приложения внутрь другого.
«
Ответ #13 :
Октябрь 19, 2011, 20:24 »
А не дашь свой проект посмотреть? Если там нет ничего секретного и он небольшой.
У меня тоже получилось но у меня не работал QTextEdit или кто-то такой (многострочный редактор).
Он никак не мог получить фокус, как я не старался. Остальные контроллы вроде работали.
Основные.
Мне до сих проблема интересна.
«
Последнее редактирование: Октябрь 19, 2011, 20:26 от andrew.k
»
Записан
vertus
Гость
Re: Внедрение интерфейса одного приложения внутрь другого.
«
Ответ #14 :
Октябрь 20, 2011, 09:48 »
Цитата: andrew.k от Октябрь 19, 2011, 20:24
А не дашь свой проект посмотреть? Если там нет ничего секретного и он небольшой.
У меня тоже получилось но у меня не работал QTextEdit или кто-то такой (многострочный редактор).
Он никак не мог получить фокус, как я не старался. Остальные контроллы вроде работали.
Основные.
Мне до сих проблема интересна.
Да, такая проблема есть. Решается переводом фокуса при активизации виджета котейнера setFocus(Qt::TabFocusReason).
Дело в том, что xembed поддерживает перевод фокуса только по tab.
Проект дать не могу. Могу дать шаблон, как делать, но тебе это не нужно походу.
Записан
Страниц: [
1
]
2
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...