Артефакты при рендере виджета

Рейтинг: 0Ответов: 2Опубликовано: 05.04.2023

В QTDesigner создана форма. На форме есть graphicsView. При помощи pyqtgraph рисуем графики. Необходимо график вывести в pdf. делаю следующим образом

pixmap = QPixmap(self.graphicsViewControlValve.size())
self.graphicsViewControlValve.render(QPainter(pixmap))

Все преобразуется как надо, но есть одна проблема. При рендере на изображении появляются артефакты, когда больше, когда меньше. Поиск нашел похожую проблему https://stackoverflow.com/questions/73461816/qgraphicsscene-artifacts-when-rendering-and-saving-the-scene-to-a-file , но у меня не получилось использовать данный метод. Толи я не разобрался, то ли у меня немного другая задача. Что нужно добавить в код, что бы избавиться от артефактов? Если можно по подробнее, пока не очень силен в терминах. введите сюда описание изображениявведите сюда описание изображениявведите сюда описание изображения

Варианты проявления могут отличаться, но в основном в верхней части картинки. Как назло сегодня не хочет жесткие варианты предоставлять. Первая можно сказать отличная, немного вверху. На второй немного смазалось изображение. Третья это вчерашний вариант сохранился. Были случаи наложения картинки друг на друга введите сюда описание изображения

Последний вариант "удачный" получился

Ответы

▲ 0

введите сюда описание изображения

QPainter painter(pixmap);
painter.setRenderHint(QPainter::Antialiasing);

Для графиков в Qt, можно также antialiasing юзать от QPainter, но он снизит точность рисования.

▲ 0

Решил задачу немного другим методом. graphicsView преобразовываю в картинку при помощи pyqtgraph.exporters, а затем картинку вставляю в pdf документ

exporter = pyqtgraph.exporters.ImageExporter(self.graphicsViewControlValve.plotItem)
exporter.params.param('width').setValue(400, blockSignal=exporter.widthChanged)
exporter.params.param('height').setValue(390, blockSignal=exporter.heightChanged)
exporter.export('fileName.png')

Качество картинки получается достойное.