Russian Qt Forum
Ноябрь 23, 2024, 02:01
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Общие вопросы
>
Взаимодействие приложений
Страниц: [
1
]
2
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Взаимодействие приложений (Прочитано 15893 раз)
Day
Частый гость
Offline
Сообщений: 290
Взаимодействие приложений
«
:
Декабрь 17, 2018, 18:41 »
Есть проект, сделанный на Borland-OWL. Последний есть тоненькая обертка над WinAPI, что бы не говорили его создатели. Конечно, он уже мне смертельно надоел, и я лелею мысль потихоньку перевести его на Qt. Сейчас это выглядит так. W-программа(основная) вызывает через CreateProcess Кутэшную часть, которая реализует некоторые диалоги и возвращает управление основной. С этим мне удалось вроде разобраться, хотя трудности были.
Теперь на очереди поручение Qt-части составления некоторых отчетиков и встраивание их в основную программу. Основная представляет из себя MDI-приложение. То есть надо, чтобы Qt-программа создавала окно и встраивала его (просила встроить) в основную как MDI-Child. Соответственно, перерисовывая его по требованию.
Вот какими механизмами при этом можно воспользоваться - и есть вопрос.
Обе части знают хендлы окон друг дружки и умеют посылать им PostMessage
Записан
Racheengel
Джедай : наставник для всех
Offline
Сообщений: 2679
Я работал с дискетам 5.25 :(
Re: Взаимодействие приложений
«
Ответ #1 :
Декабрь 18, 2018, 13:47 »
Qt Windows Migration Framework есть, правда уже старое оно, но может помочь иногда.
Записан
What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.
COVID не волк, в лес не уйдёт
Day
Частый гость
Offline
Сообщений: 290
Re: Взаимодействие приложений
«
Ответ #2 :
Декабрь 18, 2018, 14:40 »
Очень интересно! Погуглил немного, нашел только на Инглиш. А на раше, наверное, нет... Впрочем, не беда. Гугл-переводчик вполне приличен. Да и словарь можно по такому случаю в зубы взять:)
Но вот не нашел, где эту радость можно скачать...
Записан
Racheengel
Джедай : наставник для всех
Offline
Сообщений: 2679
Я работал с дискетам 5.25 :(
Re: Взаимодействие приложений
«
Ответ #3 :
Декабрь 18, 2018, 19:08 »
https://github.com/kbinani/qt-solutions/tree/master/qtwinmigrate
Записан
What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.
COVID не волк, в лес не уйдёт
Day
Частый гость
Offline
Сообщений: 290
Re: Взаимодействие приложений
«
Ответ #4 :
Декабрь 18, 2018, 21:40 »
Огромное спасибо!
Записан
Day
Частый гость
Offline
Сообщений: 290
Re: Взаимодействие приложений
«
Ответ #5 :
Декабрь 22, 2018, 12:34 »
Итак, выбран путь - через DLL (или плагины, имхо, разница невелика)
Но перед тем как приступить к экспериментам и реализации, хотелось бы проконсультироваться, насколько правильно я понимаю механизмы.
Вот, есть W-приложение. Оно вызывает функцию из DLL, сделанной на Qt. Параметр вызова - char-строка, содержащая все что нужно. (скажем, имя файла)
DLL-Qt функция создает окно (скажем, QTextEdit (readonly)) и возвращает его HWND вызвавшему приложению.
Вопросы.
DLL-Qt не должно содержать ни QApplication, ни exec(). Но надо ли в pro-файле говорить "QT -= gui" ?
И конечно, никаких activate(), show() ...?
У созданного окна должна быть функция обработки событий (сообщений по виндовски). Изменения размеров, перерисовки, скроллирования и т.п. Где она живет? Видимо, в этой DLL-Qt?
И W-приложение все события, относящиеся к этому окну, отсылает к этой функции. Так?
Когда сел писать этот пост, вопросов была туча. Но вот они свелись к такому облачку...
Записан
kuzulis
Джедай : наставник для всех
Offline
Сообщений: 2812
Re: Взаимодействие приложений
«
Ответ #6 :
Декабрь 22, 2018, 13:33 »
это еще больший гемморой. продолжай писать на Borland-OWL или переписывай с нуля на Qt.
Записан
ArchLinux x86_64 / Win10 64 bit
Day
Частый гость
Offline
Сообщений: 290
Re: Взаимодействие приложений
«
Ответ #7 :
Декабрь 22, 2018, 13:44 »
Цитата: kuzulis от Декабрь 22, 2018, 13:33
это еще больший гемморой. продолжай писать на Borland-OWL или переписывай с нуля на Qt.
За совет - спасибо.
Записан
ViTech
Гипер активный житель
Offline
Сообщений: 858
Re: Взаимодействие приложений
«
Ответ #8 :
Декабрь 22, 2018, 13:46 »
Цитата: kuzulis от Декабрь 22, 2018, 13:33
это еще больший гемморой. продолжай писать на Borland-OWL или переписывай с нуля на Qt.
Пожалуй соглашусь.
Цитата: Day от Декабрь 22, 2018, 12:34
DLL-Qt функция создает окно (скажем, QTextEdit (readonly)) и возвращает его HWND вызвавшему приложению.
Не факт. Посмотрите какой-нибудь утилиткой(например WinSpy), которая показывает Win-окна, на элементы окна WinAPI-приложения и на элементы окна Qt-приложения.
Цитата: Day от Декабрь 22, 2018, 12:34
DLL-Qt не должно содержать ни QApplication, ни exec().
Если бы всё так просто было...
Давно это пробовал, теперь уже мало чего помню. Для начала посмотрите
Event Loop in Qt-based DLL in a non-Qt application
и внимательнее изучите
qtwinmigrate
. Попробуйте для пробы сделать маленькое WinAPI приложение с Qt-виджетами в dll, и оцените, стоит такое же в большое существующее приложение тащить.
Записан
Пока сам не сделаешь...
Day
Частый гость
Offline
Сообщений: 290
Re: Взаимодействие приложений
«
Ответ #9 :
Декабрь 22, 2018, 14:28 »
Цитировать
и внимательнее изучите qtwinmigrate
Увы! Так и не удалось скачать.
Но остальными вашими советами постараюсь воспользоваться. Спасибо.
Что касаемо гемороя, то имхо, его в любом случае не избежать. По нулевому пути я уже потоптался. И стараний не оставляю. Они в любом случае не без пользы. Хотя бы в смысле освоения возможностей. И тут источником гемороя является много факторов и мнений.
На новом же пути бОльшая часть лечения будет зависеть только от меня. Так что попытаться пройти хоть немного по этому пути просто необходимо. Возникнут непреодолимые сложности - ну чтож, сдамся. Не впервой. И вам обязательно об этом доложу, чтобы вы могли потирать руки - "Мы его предупреждали!"
«
Последнее редактирование: Декабрь 22, 2018, 14:36 от Day
»
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Взаимодействие приложений
«
Ответ #10 :
Декабрь 22, 2018, 18:55 »
Цитата: Day от Декабрь 22, 2018, 12:34
DLL-Qt функция создает окно (скажем, QTextEdit (readonly)) и возвращает его HWND вызвавшему приложению.
Вопросы.
DLL-Qt не должно содержать ни QApplication, ни exec(). Но надо ли в pro-файле говорить "QT -= gui" ?
И конечно, никаких activate(), show() ...?
У созданного окна должна быть функция обработки событий (сообщений по виндовски). Изменения размеров, перерисовки, скроллирования и т.п. Где она живет? Видимо, в этой DLL-Qt?
И W-приложение все события, относящиеся к этому окну, отсылает к этой функции. Так?
У меня получалось совсем не так. Конечно Qt dll запускает Qt-приложение и exec - без этого смысла нет. Дело было на Carbon'е (OSX) и мне удалось добиться (кажется с помощью installEventHandler) что если мышь нажата в Qt-окне - вызывается обработчик Qt, иначе - старый обработчик W-приложения. То же и с клавой. Делал ли я на Вындоуз - не помню, я всегда тихо ненавидел эту платформу. Да, и удалось избавиться от dll как таковой, т.е. можно было компилить как одно приложение.
Цитата: Day от Декабрь 22, 2018, 12:34
Итак, выбран путь - через DLL (или плагины, имхо, разница невелика)
Разумно, все эти "переписывай с нуля" несерьезны. Но минус "гибрида" очевиден - Вам много придется работать "на аптеку", ну или на сращивание бульдога с носорогом. И этот процесс уже пошел
Записан
Day
Частый гость
Offline
Сообщений: 290
Re: Взаимодействие приложений
«
Ответ #11 :
Декабрь 22, 2018, 21:24 »
Цитировать
я всегда тихо ненавидел эту платформу.
У меня бывали и истерики, и запои. Доходило и до драк. Но, как у зека, который все-таки собирается выжить, пришло смирение.
Цитировать
Но минус "гибрида" очевиден
Да. Но назовите мне способ решить даже любую другую задачу, и если он будет без минусов, я пойду за вами на край света:)
Цитировать
Вам много придется работать "на аптеку", ну или на сращивание бульдога с носорогом. И этот процесс уже пошел
Да.Да.Да.
Записан
Day
Частый гость
Offline
Сообщений: 290
Re: Взаимодействие приложений
«
Ответ #12 :
Декабрь 23, 2018, 21:14 »
Я бы не стал постить этот пост, если бы не получил по-ходу пару уроков.
Я, не смотря на некоторый опыт, никогда ДЛЛ всерьез не занимался. А тут - пришлось. Как совершенно начинающий начал с ХеллоуВордовского варианта. Со стороны Qt никаких сложностей не было. Сбацали дээлку на ура. А вот с вызовом всего это хозяйства из OWL, да, там были проблемы. Хотя я уже знал ::windows-вариант, но он наводил на меня тоску. Решил воспользоваться возможностями OWL. Про эту библиотеку у меня есть 2 книжки. Клейтон Уолнэм и Том Сван. Первый - пиздобол (прошу прощения), а второй - просто лжец.
И пожалуйста! Все, кто хочет мне добра! Не советуйте что-то продолжать на OWL. Это чудовищно нелепая штука. И я, дурак, за нее зацепился. И отцепиться уже не просто. Лучше бы сразу на WinAPI. Но это тоже не сахар. И в конце XX века я был просто не готов. Да и сейчас не стал бы. Уж больно вся она полна совершеннейших нелепостей. Иногда, пытаясь разобраться с какой-то функцией, хочется поставить ее автора перед собой, и отхлестать его по щекам.
Простите за эмоции, но мы же все немножко программисты...
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Взаимодействие приложений
«
Ответ #13 :
Декабрь 24, 2018, 10:01 »
Цитата: Day от Декабрь 23, 2018, 21:14
И пожалуйста! Все, кто хочет мне добра! Не советуйте что-то продолжать на OWL. Это чудовищно нелепая штука. И я, дурак, за нее зацепился. И отцепиться уже не просто. Лучше бы ...
Ну и на какой ответ Вы рассчитываете? "Переписывай с нуля" уже советовали по меньшей мере трижды. Если у Вас хватило ума не пойти по этому пути (и правильно сделали), то большая возня с OWL неизбежна. А значит надо менять отношение к нему, и даже пытаться его как-то "полюбить" (да-да). А чтобы сделать обсуждение более предметным, неплохо бы
- ссылку на исходники/хедеры OWL
- пример типового UI на OWL с обработкой событий и.т.п. Пара страничек кода - вполне достаточно, рабочим этот код быть не обязан
Далее. Чего Вас вообще понесло в dll? Зачем она Вам? Вот есть приложение написанное на бог знает чем - ну и ладно. Можно к нему тупо прицепить Qt либы и хедеры? Конечно можно, наверное Вы уже так и сделали. Ну и дальше разбираться с событийным циклом чтобы он стал "нашим и вашим"
Записан
Old
Джедай : наставник для всех
Offline
Сообщений: 4350
Re: Взаимодействие приложений
«
Ответ #14 :
Декабрь 24, 2018, 12:03 »
Цитата: Igors от Декабрь 24, 2018, 10:01
А значит надо менять отношение к нему, и даже пытаться его как-то "полюбить" (да-да).
Да, Day, полюбите OWL, или он полюбит вас.
Потратьте в несколько раз больше времени и сил на скрещивание бульдога с носорогом. Вместо того, что бы взять готовую бизнес логику и реализовать к ней новый GUI.
Записан
Страниц: [
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 сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...