Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Padawan от Июня 24, 2010, 22:21



Название: Как сделать интерфейс похожий на Ovi Suite ?
Отправлено: Padawan от Июня 24, 2010, 22:21
Меня интересует заголовок окна, в котором сразу и меню, и имя программы и стандартные кнопки операционки ?
Кто вдруг не видел, вот
(http://pic.rapidshare.ru/1549974)


Название: Re: Как сделать интерфейс похожий на Ovi Suite ?
Отправлено: lit-uriy от Июня 24, 2010, 22:48
убирать стандартную декорацию и рисовать свою.


Название: Re: Как сделать интерфейс похожий на Ovi Suite ?
Отправлено: lit-uriy от Июня 24, 2010, 22:56
есть такая тема:  Кто видел Ribbon на Qt? (http://www.prog.org.ru/topic_10736_0.html), я думаю тебе будет полезно её прочитать


Название: Re: Как сделать интерфейс похожий на Ovi Suite ?
Отправлено: JamS007 от Июня 25, 2010, 11:33
Тут дело 2х-3х часов. Как уже посоветовал lit-uriy, лучше всего убрать стандартный заголовок окна, и рисовать свой, а потом, с помощью CSS задать стили уже другим элементам. Больше всего мороки будет перенапрвить вызов на перемещение окна, с бывшего заголовка на новый.


Название: Re: Как сделать интерфейс похожий на Ovi Suite ?
Отправлено: GreatSnake от Июня 25, 2010, 12:06
Цитировать
Тут дело 2х-3х часов
И что сам реализовал функции Window Manager-a за это время?
Не верю.


Название: Re: Как сделать интерфейс похожий на Ovi Suite ?
Отправлено: ufna от Июня 25, 2010, 12:11
Если  под этими функциями понимать перемещение окна, изменение его размеров и три вот этих кнопки "свернуть" и т.п. - то тут ничего сложного, я вот только что такую хрень для проекта сделал.

Ну а менюшки как здесь добавить - наверное реально CSS поможет.


Название: Re: Как сделать интерфейс похожий на Ovi Suite ?
Отправлено: GreatSnake от Июня 25, 2010, 12:21
Перемещающее окошко сделать не сложно.
Сложно заложить все функции WM. Ведь это окно должно иметь весь полный функционал стандартного окна.
Причём не нужно забывать и о портабельности. Под X-ами много своих тонкостей.
Для справки, размер qmdisubwindow.cpp 3500 строк. И QMdiSubWindow не имеет связи с WM.
Так что работа эта довольно-таки серъёзная.


Название: Re: Как сделать интерфейс похожий на Ovi Suite ?
Отправлено: lit-uriy от Июня 25, 2010, 15:48
>>Сложно заложить все функции WM
а я на приведённом скрине акромя трёх кнопок ни какого функционала не вижу. Да и потом, при чём здесь функционал оконного менеджера? Это отдельная софтина и нет и намёка на необходимость её переписывать.


Название: Re: Как сделать интерфейс похожий на Ovi Suite ?
Отправлено: GreatSnake от Июня 25, 2010, 15:56
Цитировать
а я на приведённом скрине акромя трёх кнопок ни какого функционала не вижу. Да и потом, при чём здесь функционал оконного менеджера? Это отдельная софтина и нет и намёка на необходимость её переписывать.
Кнопку "Maximize" видете? Как окно будет расширяться в пределах текущего десктопа и не налезать на панель задач?
Как будете кидать такое окно на другой десктоп? Как включать видимость на всех десктопах?
Кто будет это всё делать? Для обычных окон это делает WM. Здесь мы его отрубили.
Можно конечно забить на все эти тонкости, но мы же ведь пишем user-friendly софт?


Название: Re: Как сделать интерфейс похожий на Ovi Suite ?
Отправлено: pastor от Июня 25, 2010, 16:38
Кнопку "Maximize" видете? Как окно будет расширяться в пределах текущего десктопа и не налезать на панель задач?
Как будете кидать такое окно на другой десктоп? Как включать видимость на всех десктопах?
Кто будет это всё делать? Для обычных окон это делает WM. Здесь мы его отрубили.
Можно конечно забить на все эти тонкости, но мы же ведь пишем user-friendly софт?

Создается такое впечатление что вы не ведаете о том, о чем говорите.

QWidget::showMaximized()
QWidget::showMinimized();
QWidget::close();

Что еще забыл? О каком WM мы говорим? Мы только прячем заголовок и реализуем совой.


Название: Re: Как сделать интерфейс похожий на Ovi Suite ?
Отправлено: GreatSnake от Июня 25, 2010, 16:56
Цитировать
Создается такое впечатление что вы не ведаете о том, о чем говорите.
У меня точно такое же про вас.

Цитировать
QWidget::showMaximized()
QWidget::showMinimized();
Допустим на X-ах Qt просто шлёт соответствующее сообщение WM и больше ничего.

Цитировать
Что еще забыл? О каком WM мы говорим? Мы только прячем заголовок и реализуем совой.
Каким образом вы будете прятать заголовок?


Название: Re: Как сделать интерфейс похожий на Ovi Suite ?
Отправлено: pastor от Июня 25, 2010, 17:06
Допустим на X-ах Qt просто шлёт соответствующее сообщение WM и больше ничего.

А что нам еще нужно?

Каким образом вы будете прятать заголовок?

Qt::FramelessWindowHint


Название: Re: Как сделать интерфейс похожий на Ovi Suite ?
Отправлено: Rcus от Июня 25, 2010, 17:06
Нет ничего сложного в реализации базовых возможностей (\see Chromium). Но надо отдавать себе отчет в том что реализовать нативный look&feel (особенно feel) довольно сложно (те же декорации Chromium'а ведут себя не так как KWin'овские - нет подсветки, не так обрабатывается rmb, mmb по maximize).


Название: Re: Как сделать интерфейс похожий на Ovi Suite ?
Отправлено: GreatSnake от Июня 25, 2010, 17:10
Цитировать
Rcus
+1


Название: Re: Как сделать интерфейс похожий на Ovi Suite ?
Отправлено: GreatSnake от Июня 25, 2010, 17:28
Цитировать
Qt::FramelessWindowHint
Да, время не стоит на месте.
Помнится MWMHints мало кто правильно поддерживал.


Название: Re: Как сделать интерфейс похожий на Ovi Suite ?
Отправлено: ufna от Июня 25, 2010, 18:20
в Qt эта штука давным-давно, что видимо решает кучу проблем Вами описанных :)


Название: Re: Как сделать интерфейс похожий на Ovi Suite ?
Отправлено: SABROG от Июня 26, 2010, 11:47
Тут дело 2х-3х часов. Как уже посоветовал lit-uriy, лучше всего убрать стандартный заголовок окна, и рисовать свой, а потом, с помощью CSS задать стили уже другим элементам. Больше всего мороки будет перенапрвить вызов на перемещение окна, с бывшего заголовка на новый.

Если  под этими функциями понимать перемещение окна, изменение его размеров и три вот этих кнопки "свернуть" и т.п. - то тут ничего сложного, я вот только что такую хрень для проекта сделал.

Ну а менюшки как здесь добавить - наверное реально CSS поможет.

Видимо вы крутые программисты. Когда я такое реализовывал у меня (http://www.forum.crossplatform.ru/index.php?showtopic=2270&view=findpost&p=16515) ушло 3-4 дня, чтобы разобраться как рисовать стандартные контролы и заголовок как это делает Qt, да еще и поведение реализовывать, изменение размера окна без отображения контента (QRubberBand) и тому подобное.


Название: Re: Как сделать интерфейс похожий на Ovi Suite ?
Отправлено: ufna от Июня 26, 2010, 11:57
ну если честно все зависит от конкретных целей. Мне нафиг не сдался RubberBand, я эту штуку как в страшном сне забыл и видеть больше не хочу (в последний раз только на ХР вроде видел). Остальное не за 2-3 часа конечно, но за пол дня такой виджет был сделан полностью.

и еще - опыт - сын ошибок трудных ))) я такую штуку делал еще три года назад, а вот тогда посидел над ней тоже дня два-три.


Название: Re: Как сделать интерфейс похожий на Ovi Suite ?
Отправлено: JamS007 от Июня 26, 2010, 23:38
Я видел эту софтину в действии. Могу сказать, что програмисты нокии ничего особенного не придумали, выводить виджет с измененным Rect-ом думаю все смогут. Дело в том, что там заголовк не перерисовывают, его убирают, и рисуют уже на виджете, тоесть не на месте заголовка, а убирают где-то 15-20 пикс виджета, и на этом месте рисуют заголовок.

Ни о каком ок. менеджере речь не идет, повертье, этот заголовок при любых стилях будет выглядеть "вистовато", как на скрине. Они даже тень от окна добавляют как отдельный виджет, только рисуют его под главным окном... Запустите на слабой! ВМ и Вы это увидите.


Название: Re: Как сделать интерфейс похожий на Ovi Suite ?
Отправлено: villager от Июля 31, 2010, 00:32
вот есть пример: вроде то, что надо
http://developer.qt.nokia.com/faq/answer/how_can_i_handle_events_in_the_titlebar_and_change_its_color_etc (http://developer.qt.nokia.com/faq/answer/how_can_i_handle_events_in_the_titlebar_and_change_its_color_etc)
на скорую руку перевел на python - работает, но изменения размера обгоняет мышку

ps: с размерами все в порядке - ошибся при переводе