问题描述
我正在尝试在可以缩小的视图中的 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)
有帮助,但没有我希望的那么多,如下面的屏幕截图所示。
每个缩放步骤当前都设置为缩小 1.2 倍,但这似乎没有太大影响。
我怎样才能让它放大得更好,或者至少在某个时候停止绘制网格?有什么我想念的吗?我尝试使用不同的附加渲染提示(包括将它们设置在用于绘制背景的 painter
上),但我一定错过了正确的提示。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)