Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Qt 4.8.1] [x11] Задание родительского окна, Посадить имеющееся x11 окно на QWidget 
:(
    Опции темы
babutta
Дата 23.5.2013, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 18.12.2006

Репутация: нет
Всего: нет



Всем здрасти.

Никак не получается посадить имеющееся окно в иксах на QWidget что бы встроить в Qt приложение.
Т.е. есть Qt приложение и в нём создаётся окно для GL вывода средствами xlib, т.е. функцией XCreateWindow (это не моё, святое, изменять не могу).
Мне необходимо созданное таким образом GL-ное окно посадить в своё Qt-приложение.

Прочёл в документации:
void QWidget::create ( WId window = 0, bool initializeWindow = true, bool destroyOldWindow = true ) [protected]
Creates a new widget window if window is 0, otherwise sets the widget's window to window.

Initializes the window (sets the geometry etc.) if initializeWindow is true. If initializeWindow is false, no initialization is performed. This parameter only makes sense if window is a valid window.
...

написал для проверки работоспособности защищённой функции QWidget::create такой код:
Код

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QPushButton* button = new QPushButton("MEGA BUTTON");
    button->show();

    ParentWindow w(button->winId());
    w.show();
    
    return a.exec();
}



где ParentWindow описан как:
Код

class ParentWindow : public QWidget
{
    Q_OBJECT
    
public:
    ParentWindow(WId id)
    {
        create(id);
    }
};


При запуске появляется пустое окно. Хотя, по идее, оно должно содержать кнопку (или быть кнопкой). 
Кто-нибудь знает как посадить на QWidget окошко через его идентификатор в x11?
PM MAIL   Вверх
babutta
Дата 28.5.2013, 12:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 18.12.2006

Репутация: нет
Всего: нет



 Проблему удалось решить так:
Код

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    Display* display = XOpenDisplay(NULL);

    XSynchronize(display, True);
    XSetErrorHandler(myErrorHandler);

    Window x11root = XDefaultRootWindow(display);

    int x = 500;
    int y = 500;
    unsigned int width = 150;
    unsigned int height = 150;
    unsigned int borderWidth = 0;
    long colorBlue = 0xff0000ff;

    Window x11w = XCreateSimpleWindow(display, x11root, x, y, 
        width, height, borderWidth, 1 /*magic number*/, colorBlue);

    QWidget w;
    w.resize(300, 300);
    w.show();

    XReparentWindow(display, x11w, w.winId(), 0, 0);
    XMapWindow(display, x11w); // должно быть отработано после вызова XReparentWindow, 
                               // иначе x-окна окна невидно.

    return a.exec();
}


Вот так это выглядит:
http://s1.ipicture.ru/uploads/20130528/xngSEeIq.png

Решить задачу через ParentWindow, можно сказать, не получилось - xwindow встраивается в QWidget, но возникают проблемы при изменении размеров окна и оно не хочет закрываться =)

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.0506 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.