Russian Qt Forum
Ноябрь 01, 2024, 07:25
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
2D и 3D графика
>
QQOpenGLWidget (Qt5.5.0, win32, mingw) + QPainter::drawLine = bug?
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: QQOpenGLWidget (Qt5.5.0, win32, mingw) + QPainter::drawLine = bug? (Прочитано 3422 раз)
Kurles
Бывалый
Offline
Сообщений: 480
QQOpenGLWidget (Qt5.5.0, win32, mingw) + QPainter::drawLine = bug?
«
:
Октябрь 15, 2015, 14:56 »
Доброго времени суток.
Есть приложение, написанное на Qt, версия 5.5.0, пробовал так же на свежей 5.5.1 и 5.4.2 (своя картография, основанная на тайлах).
Рисование происходит в методе paintGL(), без использования нативных OpenGL вызовов, только QPainter.
И вот в один прекрасный момент понадобилось на карте рисовать линии, для чего, не мудрствуя лукаво, был выбран QPainterPath + QPainter::drawPath. Но оказалось, что при рисовании некоторые линии вообще не рисуются, некоторые рисуются с не той толщиной линии, что задана в параметрах QPen. При замене drawPath на drawLine ситуация не изменилась.
Для демонстрации написал небольшое приложение, воспроизводящее баг (два виджета, один паинтер, при использовании обычного QWidget бага нет). Приложение во вложении.
Может есть какие пути решения этой проблемы без отказа от QOpenGLWidget, ибо реально разница в скорости значительная по сравнению с QWidget, может надо какие-то дополнительные телодвижения перед отрисовкой делать?
Записан
Код
C++ (Qt)
while
(
!
asleep
(
)
)
sheep
++;
Racheengel
Джедай : наставник для всех
Offline
Сообщений: 2679
Я работал с дискетам 5.25 :(
Re: QQOpenGLWidget (Qt5.5.0, win32, mingw) + QPainter::drawLine = bug?
«
Ответ #1 :
Октябрь 15, 2015, 15:05 »
Qt 5.5.0, Windows 7, MSVC 2015: не собралось из-за строчки glEnable(GL_MULTISAMPLE);
Закомментировал, собралось и вроде как работает. С одной лишь разницей - линия справа более толстая (на 1-2 пикселя), чем слева. Если значение в комбобоксе меньше 3 - линия слева вообще не видна.
Но - это конкретно на этой машине с конкретной видеокартой. С другими могут быть другие проблемы (например, как у вас).
Записан
What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.
COVID не волк, в лес не уйдёт
Kurles
Бывалый
Offline
Сообщений: 480
Re: QQOpenGLWidget (Qt5.5.0, win32, mingw) + QPainter::drawLine = bug?
«
Ответ #2 :
Октябрь 15, 2015, 15:22 »
Цитата: Racheengel от Октябрь 15, 2015, 15:05
Qt 5.5.0, Windows 7, MSVC 2015: не собралось из-за строчки glEnable(GL_MULTISAMPLE);
Закомментировал, собралось и вроде как работает. С одной лишь разницей - линия справа более толстая (на 1-2 пикселя), чем слева. Если значение в комбобоксе меньше 3 - линия слева вообще не видна.
Но - это конкретно на этой машине с конкретной видеокартой. С другими могут быть другие проблемы (например, как у вас).
Там в приложении можно с зажатой мышкой вьюпорт двигать, по умолчанию не видно проблемного участка.
Попробуйте всю кривую проследить с толщиной линии 3 и 4.
Записан
Код
C++ (Qt)
while
(
!
asleep
(
)
)
sheep
++;
Kurles
Бывалый
Offline
Сообщений: 480
Re: QQOpenGLWidget (Qt5.5.0, win32, mingw) + QPainter::drawLine = bug?
«
Ответ #3 :
Октябрь 15, 2015, 16:15 »
Поигрался еще с проблемой.
Дело в QPainter::translate.
перед рисованием делаю tanslate на
QPoint(-42336200,-18989600)
для паинтера - и вылезает данное поведение.
А если делать translate не для паинтера, а для QPainterPath, то рисуется всё нормально. Такие дела, явный баг.
Записан
Код
C++ (Qt)
while
(
!
asleep
(
)
)
sheep
++;
Страниц: [
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 сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...