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

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

Страниц: [1] 2 3   Вниз
  Печать  
Автор Тема: вписать окно другого приложения в QWidget  (Прочитано 14425 раз)
Firefox
Гость
« : Апрель 07, 2014, 15:43 »

Здравствуйте. Хочу спросить совета. У меня есть программа у которой будет форма. я хочу нанести на форму область, ну скажем QFrame или QWidget (не знаю какой элемент для данной цели подойдет лучше) и, чтобы при запуске из моей программы другого приложения окно того приложения встраивалось в этот QFrame или QWidget. Получить id окна я могу функцией findWindow(), так как знаю название окна запускаемой программы(единственное хотелось бы не winApi использовать), а вот далее какими функциями можно реализовать нужную мне весчь?
Записан
Swa
Самовар
**
Offline Offline

Сообщений: 170


Просмотр профиля
« Ответ #1 : Апрель 08, 2014, 08:02 »

В Qt такой возможности нет.
Единственный вариант - через Winapi, найти id окна, установить для него размер и положение такое, какое нужно и перехватывать его события на перемещение и изменение размера.
Записан
Firefox
Гость
« Ответ #2 : Апрель 08, 2014, 11:14 »

это я знаю но мне не подходит потому как одна программа будет всегда не активной в таком случае.
вот наткнулась вот на это но пока не знаю с какой стороны к нему подойти  QWidget::createWindowContainer();
Записан
Firefox
Гость
« Ответ #3 : Апрель 16, 2014, 13:31 »

в общем проблема свелась к тому что надо у второго окна приложения сделать родителем первое приложение.
Записан
Bepec
Гость
« Ответ #4 : Апрель 16, 2014, 13:52 »

Гы Улыбающийся Свелась в смысле - сам придумал, но ещё не реализовал?
Записан
Firefox
Гость
« Ответ #5 : Апрель 16, 2014, 13:55 »

в смысле почитала, что вписывать никуда ничего не надо.
вот не пойму почему не работает 
Код:
void Widget::showAllHiddenTopLevelWidgets()
{
    int count=0;
    foreach (QWidget *widget, QApplication::topLevelWidgets())
    {
        if (widget->isWindow())
           count++;
    }
    qDebug()<<count;
}

счетчик всегда равен 1, не смотря на количество запущенных приложений
Записан
OKTA
Гость
« Ответ #6 : Апрель 16, 2014, 14:30 »

Потому что видимо это способ показать окна, принадлежащие только текущему приложению.
Для linux было такое - http://doc.qt.digia.com/solutions/3/qtxembed/qtxembedcontainer.html
Для винды уверен так просто не сделать - все, что можно попробовать, это, как сказал Swa, получить HWND окна целевого приложения и уже с ним изголяться.
Записан
Bepec
Гость
« Ответ #7 : Апрель 16, 2014, 14:34 »

Вкратце - процессы между собой никак не связаны. Точка Веселый
Записан
Firefox
Гость
« Ответ #8 : Апрель 16, 2014, 14:42 »

QWidget find(WId) можно WId на HWND заменить?
Код:
HWND ff=findWindow("1.exe");
QWidget *wgt= QWidget::find(ff);
wgt->setParent(this->parentWidget());
что-то наподобие такого можно сделать?
Записан
OKTA
Гость
« Ответ #9 : Апрель 16, 2014, 14:50 »

Код:
typedef WId
Platform dependent window identifier.

на винде это и должен быть HWND.
Но так просто не получится))

Скажите лучше, зачем вообще запихивать одно приложение в другое?)
Записан
Bepec
Гость
« Ответ #10 : Апрель 16, 2014, 14:52 »

Я бы за такое не взялся, при всём своём вращении между извращенскими программами. Веселый
Записан
OKTA
Гость
« Ответ #11 : Апрель 16, 2014, 14:57 »

Windows hooking дает страшную силу, но и изрядно страшен сам по себе  Смеющийся
Второе обычно страшнее  Смеющийся

Посмотрите, как похожие вещи делаются на каком-нибудь Delphi. уж уверен там этого можно добиться - может что полезное будет)

Вот к примеру

http://embarcadero.newsgroups.archived.at/public.delphi.vcl.components.using/201101/1101066733.html
http://stackoverflow.com/questions/7611103/embedding-window-into-another-process
« Последнее редактирование: Апрель 16, 2014, 15:02 от OKTA » Записан
Firefox
Гость
« Ответ #12 : Апрель 16, 2014, 15:03 »

я не могу менять среду разработки. она прописана в документах. моя задача сделать только оболочку. в линуксе есть пример программы сделаный через Х11 там все работает, а вот в Windows надо сделать такое же.
Записан
Firefox
Гость
« Ответ #13 : Апрель 16, 2014, 15:16 »

Суть для чего я это делаю: Мне надо сделать оболочку, которая запускает 15 программ. в зависимости от нажатой кнопки та или иная программа показывается в определенном месте экрана. И оболочка и программа в данный момент обе должны быть активны. вот смысл для чего это надо. я делаю только оболочку, на которой отображается общие моменты для всех 15 программ и отображение окон программ попеременно.
Записан
OKTA
Гость
« Ответ #14 : Апрель 16, 2014, 15:18 »

Дело не в среде, а в технике  Подмигивающий Может там что-то полезное будет и переносимое на Qt, откуда вы знаете?  Улыбающийся
Записан
Страниц: [1] 2 3   Вверх
  Печать  
 
Перейти в:  


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