Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: QCasper от Ноябрь 28, 2009, 21:23



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


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

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


Название: Re: Альтернативный заголовок и рамка окна
Отправлено: zenden от Ноябрь 28, 2009, 21:57
посмотри исходники к примеру мессенджера Qutim
Там они сделали окно контактов с собственной рамкой


Название: Re: Альтернативный заголовок и рамка окна
Отправлено: spectre71 от Ноябрь 28, 2009, 22:00
посмотри исходники к примеру мессенджера Qutim
Там они сделали окно контактов с собственной рамкой

Ну я же написал выше, почему тебе не сделать перетаквание границ самому?


Название: Re: Альтернативный заголовок и рамка окна
Отправлено: sendevent от Ноябрь 28, 2009, 22:49
Цитировать
Если перемещение еще можно худо бедно реализовать, то с ресайзом совсем проблема.
для ресайзинга есть замечательный класс QSizeGrip (http://qt.nokia.com/doc/4.5/qsizegrip.html)


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

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

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

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


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


Название: Re: Альтернативный заголовок и рамка окна
Отправлено: QCasper от Ноябрь 28, 2009, 22:56
Посмотри на:
void QWidget::setMouseTracking ( bool enable )

И что я там должен увидеть?


Название: Re: Альтернативный заголовок и рамка окна
Отправлено: BRE от Ноябрь 28, 2009, 23:00
Посмотри на:
void QWidget::setMouseTracking ( bool enable )

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

Будешь получать все события от мыши, даже если она не находиться на виджетом, пока не сделаешь releaseMouse().


Название: Re: Альтернативный заголовок и рамка окна
Отправлено: QCasper от Ноябрь 28, 2009, 23:08
Точнее на:
void QWidget::grabMouse ()

Это уже ближе. Спасибо, попробую.


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

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

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

В этом нет необходимости. При зажатой кнопке мыши событие Mouse Move передается.


Название: Re: Альтернативный заголовок и рамка окна
Отправлено: BRE от Ноябрь 28, 2009, 23:41
В этом нет необходимости.
Да я поправился.

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


Название: Re: Альтернативный заголовок и рамка окна
Отправлено: zenden от Ноябрь 29, 2009, 02:03
Цитировать
С чего Вы взяли? Обычное окно там. По крайней мере в линуксе. Думаю в винде то же самое.

(http://www.qutim.org/uploads/styles/season_preview.png)

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


Название: Re: Альтернативный заголовок и рамка окна
Отправлено: spectre71 от Ноябрь 29, 2009, 03:02
Цитировать
С чего Вы взяли? Обычное окно там. По крайней мере в линуксе. Думаю в винде то же самое.

(http://www.qutim.org/uploads/styles/season_preview.png)

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

Вот по этому и настраивоемое скином, что вырублен стандартный заголовок и рамка. И отрисовка их самостоятельная, рисуют скинами.


Название: Re: Альтернативный заголовок и рамка окна
Отправлено: spectre71 от Ноябрь 29, 2009, 03:09
В этом нет необходимости.
Да я поправился.

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

Абсолютно. ;)


Название: Re: Альтернативный заголовок и рамка окна
Отправлено: QCasper от Ноябрь 29, 2009, 12:24
Обрабатываются до тех пор пока ты не отжал все кнопки мыши!

Не знаю, у меня не обрабатываются. Попробуйте сами, и покажите код.


Название: Re: Альтернативный заголовок и рамка окна
Отправлено: spectre71 от Ноябрь 29, 2009, 12:43
Обрабатываются до тех пор пока ты не отжал все кнопки мыши!

Не знаю, у меня не обрабатываются. Попробуйте сами, и покажите код.

Сделай компилябильный тест, ничего лишнего, только Отслеживание Mouse Move, и выложи сюда.
Обязательно под QT Creator с pro-файлом!


Название: Re: Альтернативный заголовок и рамка окна
Отправлено: QCasper от Ноябрь 29, 2009, 13:16
Обрабатываются до тех пор пока ты не отжал все кнопки мыши!

Да, в простейшем тесте, действительно так и есть. Попробую найти причину в основной программе.