Russian Qt Forum
Ноябрь 27, 2024, 17:21
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Пользовательский интерфейс (GUI)
>
Рисование вне клиентской области
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Рисование вне клиентской области (Прочитано 8116 раз)
andrew.k
Гость
Рисование вне клиентской области
«
:
Октябрь 05, 2011, 20:32 »
Возможно ли это средствами qt?
Т.е. например, покрасить рамку окна в другой цвет.
Пробовал по-разному, каждый раз получаю ошибку, что QPainter не готов.
Возможно ли это вообще?
Записан
Bepec
Гость
Re: Рисование вне клиентской области
«
Ответ #1 :
Октябрь 06, 2011, 08:26 »
Насколько я знаю - нельзя.
Но есть обходной маневр - отрисовывать полностью свою форму в том числе и с заголовком и кнопками(соответственно переопределять кнопки закрытия, свертывания, развертывания самому. Перемещение и растягивание аналогично)
В результате у тебя на экране будет эм.. "картинка" с нарисованным заголовком и прочими деталями, которая для пользователя будет казаться просто окном
Записан
andrew.k
Гость
Re: Рисование вне клиентской области
«
Ответ #2 :
Октябрь 06, 2011, 08:56 »
это все понятно, интересует сабж
Записан
GreatSnake
Джедай : наставник для всех
Offline
Сообщений: 2921
Re: Рисование вне клиентской области
«
Ответ #3 :
Октябрь 06, 2011, 09:20 »
Цитата: andrew.k от Октябрь 06, 2011, 08:56
это все понятно, интересует сабж
Если отрисовкой декораций окна не занимается непосредственно ваше приложение, т.е. не влючен Qt::FramelessWindowHint, то этим занимается менеджер окон.
Записан
Qt 5.11/4.8.7 (X11/Win)
andrew.k
Гость
Re: Рисование вне клиентской области
«
Ответ #4 :
Октябрь 06, 2011, 14:10 »
понятно, что оконный менеджер.
Но переопределив winEvent и в нем отловив событие WM_NCPAINT я могу повлиять на отрисовку рамки.
Записан
Bepec
Гость
Re: Рисование вне клиентской области
«
Ответ #5 :
Октябрь 06, 2011, 14:51 »
Посмотрел событие - там же ясно написано, что если ты напишешь обработчик, то управление будет передано Qt, если не напишешь - то отдается снова системе.
Могу ошибаться, но тебе тогда опять таки придется перерисовывать все.
PS проверь, потесть. Помоему никто этой функций не интересовался тут ^^
Записан
andrew.k
Гость
Re: Рисование вне клиентской области
«
Ответ #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
Гость
Re: Рисование вне клиентской области
«
Ответ #8 :
Октябрь 07, 2011, 12:50 »
Видимо QPainter не позволит рисовать вам рамку.
Цитата: andrew.k от Октябрь 06, 2011, 14:10
Но переопределив winEvent и в нем отловив событие WM_NCPAINT я могу повлиять на отрисовку рамки.
И рисовать вам ее прийдется так же средствами winAPI..
QPainter-ом в этом случае можно будет максимум отрисовать QImage и вывести содержимое в место назначения уже другими средствами.
Если рисовать всю рамку, то Qt::FramelessWindowHint как-то попроще будет, а если задача на штатное обрамление окна вывести что-то еще, то можно и поизвращаться
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Рисование вне клиентской области
«
Ответ #9 :
Октябрь 07, 2011, 14:47 »
Цитата: andrew.k от Октябрь 06, 2011, 16:58
Как это сделать?
Нет ничего особо страшного в "frameless", и он имеет свои плюсы (действительно custom, оригинальный вид окон приложения на всех платформах). А начинать бодягу "только из-за цвета рамочки" смысла никакого, т.к. результат несоразмеримо мал по сравнению с затраченными усилиями.
Записан
Fess
Гость
Re: Рисование вне клиентской области
«
Ответ #10 :
Октябрь 07, 2011, 15:00 »
а вообще, ничего лучше нативных окошек нет и быть не может
если только это не очередной WinAmp и пр.
Записан
andrew.k
Гость
Re: Рисование вне клиентской области
«
Ответ #11 :
Октябрь 07, 2011, 16:21 »
я совершенно согласен, но не всегда мы делаем то, чего хотим
Записан
iroln
Гость
Re: Рисование вне клиентской области
«
Ответ #12 :
Октябрь 07, 2011, 22:54 »
Вот тут рисуют виджеты в заголовке окна:
http://habrahabr.ru/blogs/qt_software/116752/
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...