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

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

Страниц: [1] 2 3   Вниз
  Печать  
Автор Тема: вписать окно другого приложения в QWidget  (Прочитано 15087 раз)
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.028 секунд. Запросов: 19.