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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Окна, прилипающие друг к другу  (Прочитано 5211 раз)
Natalie
Гость
« : Март 24, 2006, 15:45 »

Есть два виджета (два окошка). Необходимо, чтобы они друг к другу прилипали, если подносить их близко друг к другу.

Мне говорили это можно сделать с помощью QDockWidget. Но как это именно сделать? Ведь при этом главного окна не должно быть видно. Но если главно окно сделать невидимым, то и все дочерние не будут видны.

Может кто-то такое делал... Подскажите, пожалуйста.
Записан
Shama
Гость
« Ответ #1 : Март 24, 2006, 18:07 »

Цитата: "Natalie"
Ведь при этом главного окна не должно быть видно. Но если главно окно сделать невидимым, то и все дочерние не будут видны.


Ну да, на то они и дочерние... вам надо сделать Dock окон или Виджетов всё-таки?
Записан
Natalie
Гость
« Ответ #2 : Март 25, 2006, 13:38 »

Мне просто необходимо сделать так, чтобы два окна прилипали друг к другу.

Мне кажется, что QDockWidget для этой цели не подходит, но один человек мне сказал, что с помощью QDockWidget это сделать можно. Если QDockWidget не позволяет сделать такое, то как вообще это можно реализовать?

Может кто-то такое делал?
Записан
Dendy
Гость
« Ответ #3 : Март 28, 2006, 09:57 »

QDockWidget здесь не помошник. Он завязан на QMainWindow и специальньІх областях прилипания. А тебе, я так понимаю, нужно что-то типа Winamp'а.

Я такое делал, только сразу предупреждение: За стандартньІй заголовок окошка лучше не тягать, ибо попьІтка изменить положение/размер окна по собьІтию SizeEvent/MoveEvent чревата бесконечной рекурсией. Лучше тягать за специальньІе участки или вообще убирать заголовок (как ето сделано в том же винампе).

Вот пример как я делал:

Код:
void Minimap::mousePressEvent( QMouseEvent * e )
{
if ( e->button() == Qt::LeftButton )
{
startpos = pos();
mousepos = e->globalPos();
}
}

void Minimap::mouseMoveEvent( QMouseEvent * e )
{
if ( e->buttons() & Qt::LeftButton )
{
QPoint off = e->globalPos() - mousepos;
if ( canDock( startpos + off ) )
dockMe();
else
move( startpos + off );
}
}


В canDock() проверяем куда можно прилипнуть в зависимости от неких областей прилипания, дистанции прилипания и прочего. Если можем, то липнем (двигаемся в ту точку), иначе - обьІчное движение окошка.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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