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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Альтернативный заголовок и рамка окна  (Прочитано 11738 раз)
QCasper
Гость
« : Ноябрь 28, 2009, 21:23 »

Собственно сабж. Можно конечно использовать флаг Qt::FramelessWindowHint и нарисовать свои рамку и заголовок, но тогда пропадает возможность двигать окно и изменять его размер. Если перемещение еще можно худо бедно реализовать, то с ресайзом совсем проблема. Буду благодарен за любые идеи по этому поводу.
Записан
spectre71
Гость
« Ответ #1 : Ноябрь 28, 2009, 21:53 »

Собственно сабж. Можно конечно использовать флаг Qt::FramelessWindowHint и нарисовать свои рамку и заголовок, но тогда пропадает возможность двигать окно и изменять его размер. Если перемещение еще можно худо бедно реализовать, то с ресайзом совсем проблема. Буду благодарен за любые идеи по этому поводу.

Не уверен в том что нет режима без рамки и заголовка при котором не работает расайз, но вполне возможно, я не рассматривал все режимы.
Но поскольку ты вполне готов нарисовать свою рамку и сделать премещение окна, так что тебе мешает менять курсор на своей рамке соответствующим образом и отрабатывать Mouse: Press, Move, Release, для изменения размера окна.
Записан
zenden
Гость
« Ответ #2 : Ноябрь 28, 2009, 21:57 »

посмотри исходники к примеру мессенджера Qutim
Там они сделали окно контактов с собственной рамкой
Записан
spectre71
Гость
« Ответ #3 : Ноябрь 28, 2009, 22:00 »

посмотри исходники к примеру мессенджера Qutim
Там они сделали окно контактов с собственной рамкой

Ну я же написал выше, почему тебе не сделать перетаквание границ самому?
Записан
sendevent
Гость
« Ответ #4 : Ноябрь 28, 2009, 22:49 »

Цитировать
Если перемещение еще можно худо бедно реализовать, то с ресайзом совсем проблема.
для ресайзинга есть замечательный класс QSizeGrip
Записан
QCasper
Гость
« Ответ #5 : Ноябрь 28, 2009, 22:50 »

Но поскольку ты вполне готов нарисовать свою рамку и сделать премещение окна, так что тебе мешает менять курсор на своей рамке соответствующим образом и отрабатывать Mouse: Press, Move, Release, для изменения размера окна.

Если бы все было так просто, то я бы сюда не писал. Проблема заключается в следующем. Ресайз предполагается делать, когда мышка находится на границе окна. Граница окна это пикселя 4, не больше. А теперь представьте себе ситуацию. Пользователь помещает указатель мыши на нашу границу. Нажимает левую кнопку мыши. Здесь мы готовы делать ресайз. Но после этого он не плавно тащит мышку в сторону, а делает это рывком. В результате мышь выходит за область окна, и оно, окно, больше не обрабатывает события мыши, и в результате наше окно больше не изменяет размер.

посмотри исходники к примеру мессенджера Qutim
Там они сделали окно контактов с собственной рамкой

С чего Вы взяли? Обычное окно там. По крайней мере в линуксе. Думаю в винде то же самое.
Записан
BRE
Гость
« Ответ #6 : Ноябрь 28, 2009, 22:53 »

Если бы все было так просто, то я бы сюда не писал. Проблема заключается в следующем. Ресайз предполагается делать, когда мышка находится на границе окна. Граница окна это пикселя 4, не больше. А теперь представьте себе ситуацию. Пользователь помещает указатель мыши на нашу границу. Нажимает левую кнопку мыши. Здесь мы готовы делать ресайз. Но после этого он не плавно тащит мышку в сторону, а делает это рывком. В результате мышь выходит за область окна, и оно, окно, больше не обрабатывает события мыши, и в результате наше окно больше не изменяет размер.
Посмотри на:
void QWidget::setMouseTracking ( bool enable )
Записан
QCasper
Гость
« Ответ #7 : Ноябрь 28, 2009, 22:56 »

Посмотри на:
void QWidget::setMouseTracking ( bool enable )

И что я там должен увидеть?
Записан
BRE
Гость
« Ответ #8 : Ноябрь 28, 2009, 23:00 »

Посмотри на:
void QWidget::setMouseTracking ( bool enable )

И что я там должен увидеть?
Точнее на:
void QWidget::grabMouse ()

Будешь получать все события от мыши, даже если она не находиться на виджетом, пока не сделаешь releaseMouse().
Записан
QCasper
Гость
« Ответ #9 : Ноябрь 28, 2009, 23:08 »

Точнее на:
void QWidget::grabMouse ()

Это уже ближе. Спасибо, попробую.
Записан
spectre71
Гость
« Ответ #10 : Ноябрь 28, 2009, 23:40 »

Если бы все было так просто, то я бы сюда не писал. Проблема заключается в следующем. Ресайз предполагается делать, когда мышка находится на границе окна. Граница окна это пикселя 4, не больше. А теперь представьте себе ситуацию. Пользователь помещает указатель мыши на нашу границу.Нажимает левую кнопку мыши. Здесь мы готовы делать ресайз. Но после этого он не плавно тащит мышку в сторону, а делает это рывком. В результате мышь выходит за область окна, и оно, окно, больше не обрабатывает события мыши, и в результате наше окно больше не изменяет размер.

Обрабатываются до тех пор пока ты не отжал все кнопки мыши!

Посмотри на:
void QWidget::setMouseTracking ( bool enable )

В этом нет необходимости. При зажатой кнопке мыши событие Mouse Move передается.
Записан
BRE
Гость
« Ответ #11 : Ноябрь 28, 2009, 23:41 »

В этом нет необходимости.
Да я поправился.

При зажатой кнопке мыши событие Mouse Move передается.
Ты уверен?  Подмигивающий
Записан
zenden
Гость
« Ответ #12 : Ноябрь 29, 2009, 02:03 »

Цитировать
С чего Вы взяли? Обычное окно там. По крайней мере в линуксе. Думаю в винде то же самое.



вид рамки зависит от скина, также можно поставить стандартную рамку
Записан
spectre71
Гость
« Ответ #13 : Ноябрь 29, 2009, 03:02 »

Цитировать
С чего Вы взяли? Обычное окно там. По крайней мере в линуксе. Думаю в винде то же самое.



вид рамки зависит от скина, также можно поставить стандартную рамку

Вот по этому и настраивоемое скином, что вырублен стандартный заголовок и рамка. И отрисовка их самостоятельная, рисуют скинами.
Записан
spectre71
Гость
« Ответ #14 : Ноябрь 29, 2009, 03:09 »

В этом нет необходимости.
Да я поправился.

При зажатой кнопке мыши событие Mouse Move передается.
Ты уверен?  Подмигивающий

Абсолютно. Подмигивающий
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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