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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Взаимодействие приложений  (Прочитано 15909 раз)
Day
Частый гость
***
Offline Offline

Сообщений: 290


Просмотр профиля
« : Декабрь 17, 2018, 18:41 »

 Есть проект, сделанный на Borland-OWL. Последний есть тоненькая обертка над WinAPI, что бы не говорили его создатели. Конечно, он уже мне смертельно надоел, и я лелею мысль потихоньку перевести его на Qt. Сейчас это выглядит так. W-программа(основная) вызывает через CreateProcess Кутэшную часть, которая реализует некоторые диалоги и возвращает управление основной. С этим мне удалось вроде разобраться, хотя трудности были.
 Теперь на очереди поручение Qt-части составления некоторых отчетиков и встраивание их в основную программу. Основная представляет из себя MDI-приложение. То есть надо, чтобы Qt-программа создавала окно и встраивала его (просила встроить) в основную как MDI-Child. Соответственно, перерисовывая его по требованию.
 Вот какими механизмами при этом можно воспользоваться - и есть вопрос.
 Обе части знают хендлы окон друг дружки и умеют посылать им PostMessage
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #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 Offline

Сообщений: 290


Просмотр профиля
« Ответ #2 : Декабрь 18, 2018, 14:40 »

Очень интересно! Погуглил немного, нашел только на Инглиш. А на раше, наверное, нет... Впрочем, не беда. Гугл-переводчик вполне приличен. Да и словарь можно по такому случаю в зубы взять:)
Но вот не нашел, где эту радость можно скачать...
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #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 Offline

Сообщений: 290


Просмотр профиля
« Ответ #4 : Декабрь 18, 2018, 21:40 »

Огромное спасибо!
Записан
Day
Частый гость
***
Offline Offline

Сообщений: 290


Просмотр профиля
« Ответ #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 Offline

Сообщений: 2812


Просмотр профиля
« Ответ #6 : Декабрь 22, 2018, 13:33 »

это еще больший гемморой. продолжай писать на Borland-OWL или переписывай с нуля на Qt.
Записан

ArchLinux x86_64 / Win10 64 bit
Day
Частый гость
***
Offline Offline

Сообщений: 290


Просмотр профиля
« Ответ #7 : Декабрь 22, 2018, 13:44 »

это еще больший гемморой. продолжай писать на Borland-OWL или переписывай с нуля на Qt.
За совет - спасибо. Улыбающийся
Записан
ViTech
Гипер активный житель
*****
Offline Offline

Сообщений: 858



Просмотр профиля
« Ответ #8 : Декабрь 22, 2018, 13:46 »

это еще больший гемморой. продолжай писать на Borland-OWL или переписывай с нуля на Qt.
Пожалуй соглашусь.

DLL-Qt функция создает окно (скажем, QTextEdit (readonly)) и возвращает его HWND вызвавшему приложению.

Не факт. Посмотрите какой-нибудь утилиткой(например WinSpy), которая показывает Win-окна, на элементы окна WinAPI-приложения и на элементы окна Qt-приложения.

DLL-Qt не должно содержать ни QApplication, ни exec().
Если бы всё так просто было...

Давно это пробовал, теперь уже мало чего помню. Для начала посмотрите Event Loop in Qt-based DLL in a non-Qt application и внимательнее изучите qtwinmigrate. Попробуйте для пробы сделать маленькое WinAPI приложение с Qt-виджетами в dll, и оцените, стоит такое же в большое существующее приложение тащить.
Записан

Пока сам не сделаешь...
Day
Частый гость
***
Offline Offline

Сообщений: 290


Просмотр профиля
« Ответ #9 : Декабрь 22, 2018, 14:28 »

Цитировать
и внимательнее изучите qtwinmigrate
Увы! Так и не удалось скачать.
Но остальными вашими советами постараюсь воспользоваться. Спасибо.
Что касаемо гемороя, то имхо, его  в любом случае не избежать. По нулевому пути я уже потоптался.  И стараний не оставляю. Они в любом случае не без пользы. Хотя бы в смысле освоения возможностей. И тут источником гемороя является много факторов и мнений.
На новом же пути бОльшая часть лечения будет зависеть только от меня. Так что попытаться пройти хоть немного по этому пути просто необходимо. Возникнут непреодолимые сложности - ну чтож, сдамся. Не впервой. И вам обязательно об этом доложу, чтобы вы могли потирать руки - "Мы его предупреждали!"Улыбающийся
« Последнее редактирование: Декабрь 22, 2018, 14:36 от Day » Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #10 : Декабрь 22, 2018, 18:55 »

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 как таковой, т.е. можно было компилить как одно приложение.

Итак, выбран путь - через DLL (или плагины, имхо, разница невелика)
Разумно, все эти "переписывай с нуля" несерьезны. Но минус "гибрида" очевиден - Вам много придется работать "на аптеку", ну или на сращивание бульдога с носорогом. И этот процесс уже пошел  Улыбающийся
Записан
Day
Частый гость
***
Offline Offline

Сообщений: 290


Просмотр профиля
« Ответ #11 : Декабрь 22, 2018, 21:24 »

Цитировать
я всегда тихо ненавидел эту платформу.
У меня бывали и истерики, и запои. Доходило и до драк. Но, как у зека, который все-таки собирается выжить, пришло смирение.Улыбающийся
Цитировать
Но минус "гибрида" очевиден
Да. Но назовите мне способ решить даже любую другую задачу, и если он будет без минусов, я пойду за вами на край света:)
Цитировать
Вам много придется работать "на аптеку", ну или на сращивание бульдога с носорогом. И этот процесс уже пошел
Да.Да.Да.
Записан
Day
Частый гость
***
Offline Offline

Сообщений: 290


Просмотр профиля
« Ответ #12 : Декабрь 23, 2018, 21:14 »

Я бы не стал постить этот пост, если бы не получил по-ходу пару уроков.
Я, не смотря на некоторый опыт, никогда ДЛЛ всерьез не занимался. А тут - пришлось. Как совершенно начинающий начал с ХеллоуВордовского варианта. Со стороны Qt никаких сложностей не было. Сбацали дээлку на ура. А вот с вызовом всего это хозяйства из OWL, да, там были проблемы. Хотя я уже знал ::windows-вариант, но он наводил на меня тоску. Решил воспользоваться возможностями OWL. Про эту библиотеку у меня есть 2 книжки. Клейтон Уолнэм и Том Сван. Первый - пиздобол (прошу прощения), а второй - просто лжец.
И пожалуйста! Все, кто хочет мне добра! Не советуйте что-то продолжать на OWL. Это чудовищно нелепая штука. И я, дурак, за нее зацепился. И отцепиться уже не просто. Лучше бы сразу на WinAPI. Но это тоже не сахар. И в конце XX века я был просто не готов. Да и сейчас не стал бы. Уж больно вся она полна совершеннейших нелепостей. Иногда, пытаясь разобраться с какой-то функцией, хочется поставить ее автора перед собой, и отхлестать его по щекам.
Простите за эмоции, но мы же все немножко программисты...
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #13 : Декабрь 24, 2018, 10:01 »

И пожалуйста! Все, кто хочет мне добра! Не советуйте что-то продолжать на OWL. Это чудовищно нелепая штука. И я, дурак, за нее зацепился. И отцепиться уже не просто. Лучше бы ...
Ну и на какой ответ Вы рассчитываете?  "Переписывай с нуля" уже советовали по меньшей мере трижды. Если у Вас хватило ума не пойти по этому пути (и правильно сделали), то большая возня с OWL неизбежна. А значит надо менять отношение к нему, и даже пытаться его как-то "полюбить" (да-да). А чтобы сделать обсуждение более предметным, неплохо бы

- ссылку на исходники/хедеры OWL
- пример типового UI на OWL с обработкой событий и.т.п. Пара страничек кода - вполне достаточно, рабочим этот код быть не обязан

Далее. Чего Вас вообще понесло в dll? Зачем она Вам? Вот есть приложение написанное на бог знает чем - ну и ладно. Можно к нему тупо прицепить Qt либы и хедеры? Конечно можно, наверное Вы уже так и сделали. Ну и дальше разбираться с событийным циклом чтобы он стал "нашим и вашим"

Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #14 : Декабрь 24, 2018, 12:03 »

А значит надо менять отношение к нему, и даже пытаться его как-то "полюбить" (да-да).
Да, Day, полюбите OWL, или он полюбит вас. Улыбающийся
Потратьте в несколько раз больше времени и сил на скрещивание бульдога с носорогом. Вместо того, что бы взять готовую бизнес логику и реализовать к ней новый GUI.
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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