Название: Рисование вне клиентской области Отправлено: andrew.k от Октябрь 05, 2011, 20:32 Возможно ли это средствами qt?
Т.е. например, покрасить рамку окна в другой цвет. Пробовал по-разному, каждый раз получаю ошибку, что QPainter не готов. Возможно ли это вообще? Название: Re: Рисование вне клиентской области Отправлено: Bepec от Октябрь 06, 2011, 08:26 Насколько я знаю - нельзя.
Но есть обходной маневр - отрисовывать полностью свою форму в том числе и с заголовком и кнопками(соответственно переопределять кнопки закрытия, свертывания, развертывания самому. Перемещение и растягивание аналогично) В результате у тебя на экране будет эм.. "картинка" с нарисованным заголовком и прочими деталями, которая для пользователя будет казаться просто окном :) Название: Re: Рисование вне клиентской области Отправлено: andrew.k от Октябрь 06, 2011, 08:56 это все понятно, интересует сабж
Название: Re: Рисование вне клиентской области Отправлено: GreatSnake от Октябрь 06, 2011, 09:20 это все понятно, интересует сабж Если отрисовкой декораций окна не занимается непосредственно ваше приложение, т.е. не влючен Qt::FramelessWindowHint, то этим занимается менеджер окон.Название: Re: Рисование вне клиентской области Отправлено: andrew.k от Октябрь 06, 2011, 14:10 понятно, что оконный менеджер.
Но переопределив winEvent и в нем отловив событие WM_NCPAINT я могу повлиять на отрисовку рамки. Название: Re: Рисование вне клиентской области Отправлено: Bepec от Октябрь 06, 2011, 14:51 Посмотрел событие - там же ясно написано, что если ты напишешь обработчик, то управление будет передано Qt, если не напишешь - то отдается снова системе.
Могу ошибаться, но тебе тогда опять таки придется перерисовывать все. PS проверь, потесть. Помоему никто этой функций не интересовался тут ^^ Название: Re: Рисование вне клиентской области Отправлено: andrew.k от Октябрь 06, 2011, 16:58 Меня все не интересует, интересует только рамка.
Мне не удается инициализировать QPainter. Он постоянно ругается и ничего не рисует. Говорит, что нельзя рисовать вне события paintEvent или это я прочитал где-то. Есть флаг, который это вроде бы разрешает, но в ассистанте написано, что не работает под виндус. Как это сделать? Название: Просто тема Отправлено: Bepec от Октябрь 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. Название: Re: Рисование вне клиентской области Отправлено: Fess от Октябрь 07, 2011, 12:50 Видимо QPainter не позволит рисовать вам рамку.
Но переопределив winEvent и в нем отловив событие WM_NCPAINT я могу повлиять на отрисовку рамки. И рисовать вам ее прийдется так же средствами winAPI..QPainter-ом в этом случае можно будет максимум отрисовать QImage и вывести содержимое в место назначения уже другими средствами. Если рисовать всю рамку, то Qt::FramelessWindowHint как-то попроще будет, а если задача на штатное обрамление окна вывести что-то еще, то можно и поизвращаться :) Название: Re: Рисование вне клиентской области Отправлено: Igors от Октябрь 07, 2011, 14:47 Как это сделать? Нет ничего особо страшного в "frameless", и он имеет свои плюсы (действительно custom, оригинальный вид окон приложения на всех платформах). А начинать бодягу "только из-за цвета рамочки" смысла никакого, т.к. результат несоразмеримо мал по сравнению с затраченными усилиями.Название: Re: Рисование вне клиентской области Отправлено: Fess от Октябрь 07, 2011, 15:00 а вообще, ничего лучше нативных окошек нет и быть не может
если только это не очередной WinAmp и пр. Название: Re: Рисование вне клиентской области Отправлено: andrew.k от Октябрь 07, 2011, 16:21 я совершенно согласен, но не всегда мы делаем то, чего хотим ;)
Название: Re: Рисование вне клиентской области Отправлено: iroln от Октябрь 07, 2011, 22:54 Вот тут рисуют виджеты в заголовке окна: http://habrahabr.ru/blogs/qt_software/116752/
|