Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt GUI _ Свое окно под другим.

Автор: RazrFalcon 7.2.2011, 20:31

К примеру открыл тот же видео плеер, не на весь экран.
Мое окно должно помещятся под ним. У меня на 10пикс. с каждой стороны выглядывает.
Сейчас я http://www.forum.crossplatform.ru/index.php?showtopic=6439 разобрался как получать положение окна.
Затем через setGeometry() ставлю свое окно куда нужно.
Но при переносе оно конечно остается на месте. Если setGeometry запихнуть в while то окно вообще не появляется.
Как сделать чтобы окно мое таскалось вместе с "родительским"?

И нужно что бы окно было всегда под тем окном, под которым оно прячится.

Автор: Litkevich Yuriy 7.2.2011, 20:37

Цитата(RazrFalcon @ 7.2.2011, 22:31) *
Если setGeometry запихнуть в while то окно вообще не появляется.
:)

Цитата(RazrFalcon @ 7.2.2011, 22:31) *
Как сделать чтобы окно мое таскалось вместе с "родительским"?
при перемещении "родителя" перемещать и "дочернее".
Вообще можно и без кавычек. Просто указать виджету явно, что он - окно. Удобнее всего использовать фильтр событий.

Автор: RazrFalcon 7.2.2011, 20:43

а? я не понял...
Родитель - не мое окно. Это плеер, или вообще что угодно.
Что значит сделать окном "явно"?
Какой фильтр?

Автор: Litkevich Yuriy 7.2.2011, 20:47

Примерно так:

MainWindow::MainWindow(...)
{
    botomWindow = BotomWindow(this, Qt::Window | Qt::FramelessWindowHint);
    installEventFilter(botomWindow);
}

BotomWindow::eventFilter(QObject *obj, QEvent *event)
{
     if ((event->type() == QEvent::Move) && (obj == parent()) ) {
         // двигаем это нижнее оконо вслед за родителем
         return true;
     } else {
         // standard event processing
         return QObject::eventFilter(obj, event);
     }
}


Цитата(RazrFalcon @ 7.2.2011, 22:43) *
Родитель - не мое окно. Это плеер, или вообще что угодно.
как ты намерен его координаты получать? И вообще определять, что оно изменило положение?

Автор: RazrFalcon 7.2.2011, 20:50

Цитата(Litkevich Yuriy @ 7.2.2011, 19:47) *
как ты намерен его координаты получать? И вообще определять, что оно изменило положение?

#!/bin/bash
xwininfo -id `wmctrl -l | grep SMPlayer | cut -c1-10`  | grep 'Absolute upper-left X' | cut -c27-
xwininfo -id `wmctrl -l | grep SMPlayer | cut -c1-10`  | grep 'Absolute upper-left Y' | cut -c27-
xwininfo -id `wmctrl -l | grep SMPlayer | cut -c1-10` | grep Width: | cut -c10-
xwininfo -id `wmctrl -l | grep SMPlayer | cut -c1-10` | grep Height: | cut -c11-

Только они аж после того как я переместил меняются <_<

Пример выше не подходит, вроде, это же не мое окно =/



Автор: Litkevich Yuriy 7.2.2011, 21:18

Может быть тогда тебе попробовать ловить события с помощью
bool QApplication::x11EventFilter ( XEvent * event ) [virtual]

Либо воспользоватся сторонней разработкой расширяющей Qt -- Qxt.
В частности классом http://libqxt.bitbucket.org/doc/0.6/qxtwindowsystem.html, с помощью него можно найти идентификатор окна и, потенциально, поставить на это окно фильтр событий

Автор: RazrFalcon 7.2.2011, 21:49

Судя по всему Qxt - лучший вариант.
Теперь буду пробовать.

Автор: Litkevich Yuriy 8.2.2011, 7:44

Цитата(RazrFalcon @ 7.2.2011, 23:49) *
Ссылку на описание какое то можно, пожалуйста?
в документации есть ссылка, на главной странице, ищи

Автор: RazrFalcon 8.2.2011, 10:52

Сам виноват...
Разобрался.

Автор: RazrFalcon 8.2.2011, 11:45

Qxt поставил. Работает.
Окно нахожу, создаю сове где нужно.
Как сделать фильтр этот, на перемещении родительского окна?

Автор: RazrFalcon 11.2.2011, 9:51

Так как сделать перехватчик/фильтр положения чужого окна?

Автор: wiz29 11.2.2011, 17:33

Цитата(RazrFalcon @ 11.2.2011, 9:51) *
Так как сделать перехватчик/фильтр положения чужого окна?

Смотри пример в ответе #4, тока вместо MainWindow будет указатель на найденное тобой окно.

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)