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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Рисование вне клиентской области  (Прочитано 8126 раз)
andrew.k
Гость
« : Октябрь 05, 2011, 20:32 »

Возможно ли это средствами qt?
Т.е. например, покрасить рамку окна в другой цвет.
Пробовал по-разному, каждый раз получаю ошибку, что QPainter не готов.
Возможно ли это вообще?
Записан
Bepec
Гость
« Ответ #1 : Октябрь 06, 2011, 08:26 »

Насколько я знаю - нельзя.

Но есть обходной маневр - отрисовывать полностью свою форму в том числе и с заголовком и кнопками(соответственно переопределять кнопки закрытия, свертывания, развертывания самому. Перемещение и растягивание аналогично)

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

Записан
andrew.k
Гость
« Ответ #2 : Октябрь 06, 2011, 08:56 »

это все понятно, интересует сабж
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #3 : Октябрь 06, 2011, 09:20 »

это все понятно, интересует сабж
Если отрисовкой декораций окна не занимается непосредственно ваше приложение, т.е. не влючен Qt::FramelessWindowHint, то этим занимается менеджер окон.
Записан

Qt 5.11/4.8.7 (X11/Win)
andrew.k
Гость
« Ответ #4 : Октябрь 06, 2011, 14:10 »

понятно, что оконный менеджер.
Но переопределив winEvent и в нем отловив событие WM_NCPAINT я могу повлиять на отрисовку рамки.
Записан
Bepec
Гость
« Ответ #5 : Октябрь 06, 2011, 14:51 »

Посмотрел событие - там же ясно написано, что если ты напишешь обработчик, то управление будет передано Qt, если не напишешь - то отдается снова системе.

Могу ошибаться, но тебе тогда опять таки придется перерисовывать все.

PS проверь, потесть. Помоему никто этой функций не интересовался тут ^^
Записан
andrew.k
Гость
« Ответ #6 : Октябрь 06, 2011, 16:58 »

Меня все не интересует, интересует только рамка.
Мне не удается инициализировать QPainter. Он постоянно ругается и ничего не рисует.
Говорит, что нельзя рисовать вне события paintEvent или это я прочитал где-то.
Есть флаг, который это вроде бы разрешает, но в ассистанте написано, что не работает под виндус.

Как это сделать?
Записан
Bepec
Гость
« Ответ #7 : Октябрь 07, 2011, 10:06 »

Warning: When the paintdevice is a widget, QPainter can only be used inside a paintEvent() function or in a function called by paintEvent(); that is unless the Qt::WA_PaintOutsidePaintEvent widget attribute is set. On Mac OS X and Windows, you can only paint in a paintEvent() function regardless of this attribute's setting.

made in Assistant.

скинь тестовый пример, и определение того, что ты хочешь сделать - тогда мб и попытаю Qt.
Записан
Fess
Гость
« Ответ #8 : Октябрь 07, 2011, 12:50 »

Видимо QPainter не позволит рисовать вам рамку.
Но переопределив winEvent и в нем отловив событие WM_NCPAINT я могу повлиять на отрисовку рамки.
И рисовать вам ее прийдется так же средствами winAPI..
QPainter-ом в этом случае можно будет максимум отрисовать QImage и вывести содержимое в место назначения уже другими средствами.
Если рисовать всю рамку, то Qt::FramelessWindowHint как-то попроще будет, а если задача на штатное обрамление окна вывести что-то еще, то можно и поизвращаться Улыбающийся
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #9 : Октябрь 07, 2011, 14:47 »

Как это сделать?
Нет ничего особо страшного в "frameless", и он имеет свои плюсы (действительно custom, оригинальный вид окон приложения на всех платформах). А начинать бодягу "только из-за цвета рамочки" смысла никакого, т.к. результат несоразмеримо мал по сравнению с затраченными усилиями.
Записан
Fess
Гость
« Ответ #10 : Октябрь 07, 2011, 15:00 »

а вообще, ничего лучше нативных окошек нет и быть не может
если только это не очередной WinAmp и пр.
Записан
andrew.k
Гость
« Ответ #11 : Октябрь 07, 2011, 16:21 »

я совершенно согласен, но не всегда мы делаем то, чего хотим Подмигивающий
Записан
iroln
Гость
« Ответ #12 : Октябрь 07, 2011, 22:54 »

Вот тут рисуют виджеты в заголовке окна: http://habrahabr.ru/blogs/qt_software/116752/


Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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