QGraphicsView 中的背景在缩小时会产生锯齿

问题描述

我正在尝试在可以缩小的视图中的 QGraphicsScene 中设置背景网格。我面临的问题是我无法摆脱超过某个缩放级别的锯齿。

#ifndef MAINWIDGET_H
#define MAINWIDGET_H

#include <QWidget>
#include <QGraphicsView>
#include <QGraphicsScene>
#include <QHBoxLayout>

class MainWidget : public QWidget
{
    Q_OBJECT

public:
    QGraphicsView *createView(QHBoxLayout *layout,QGraphicsScene *scene,qreal scale) {
        auto *view = new QGraphicsView();
        layout->addWidget(view);
        view->setScene(scene);
#ifdef ANTIALIAS
        view->setRenderHints(QPainter::Antialiasing | QPainter::SmoothpixmapTransform); // helps,but only partly
#endif
        view->scale(scale,scale);
        return view;
    }

    MainWidget(QWidget *parent = nullptr) : QWidget(parent) {
        resize(800,200);
        auto *horizontalLayout = new QHBoxLayout(this);
        auto *scene = new QGraphicsScene();

        for (qreal i=1; i>0.3; i/=1.2)
            createView(horizontalLayout,scene,i);

        Qpixmap pixmap(QSize(40,40));
        pixmap.fill();

        QPainter painter(&pixmap);
        painter.setPen(QPen(Qt::black,1,Qt::DotLine));
        painter.drawLine(0,40);
        painter.drawLine(0,40,0);
        painter.end();

        scene->setBackgroundBrush(pixmap);
    }
};
#endif // MAINWIDGET_H
#include "mainwidget.h"

#include <QApplication>

int main(int argc,char *argv[])
{
    QApplication a(argc,argv);
    MainWidget w;
    w.show();
    return a.exec();
}

向视图添加 setRenderHints(QPainter::Antialiasing | QPainter::SmoothpixmapTransform) 有帮助,但没有我希望的那么多,如下面的屏幕截图所示。

没有#define ANTIALIAS

Without ANTIALIAS

使用#define ANTIALIAS

enter image description here

每个缩放步骤当前都设置为缩小 1.2 倍,但这似乎没有太大影响。

我怎样才能让它放大得更好,或者至少在某个时候停止绘制网格?有什么我想念的吗?我尝试使用不同的附加渲染提示包括将它们设置在用于绘制背景的 painter 上),但我一定错过了正确的提示

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...