缩放QGraphicsView时,线条粗细会自然变化

时间:2019-07-16 12:17:11

标签: qt qgraphicsview qgraphicsscene

我正在使用Graphics View框架在Qt中绘制线条。因为我希望我的图片在调整窗口大小时占据相同的空间,所以我覆盖了MainWindow :: resizeEvent,以便根据resize事件来调整图形视图的大小:

void MainWindow::resizeEvent(QResizeEvent *event) {
    int w = event->size().width(), h = event->size().height();
    int prev_w = event->oldSize().width(), prev_h = event->oldSize().height();
    if (prev_w != -1) {
        int s1 = std::min(prev_w, prev_h), s2 = std::min(w, h);
        qreal k = (qreal)s2 / s1;
        std::cerr << k << std::endl;
        ui->graphicsView->scale(k, k);
    }
}

但是,这样做后,我的线条(应该具有1个像素的粗细)在调整大小后有时会具有不同的粗细。据我了解,发生这种情况是因为转换到GraphicsView之后对象的坐标是真实的,因此有时会使用不同数量的像素进行绘制。那是不可接受的!我希望线条始终具有相同的1像素厚度。

所以,我的问题是:解决该问题的常用方法是什么?现在(基于上面的假设),我只能考虑删除所有对象并使用整数坐标创建新对象,但是需要重新缩放(手动)。

1 个答案:

答案 0 :(得分:0)

您需要在QPen中将线条图设置为“美容”。这使线不可缩放。否则,Qt会缩放线宽以及视图的缩放比例。查找QPen :: setCosmetic。默认情况下,画线不是装饰性的。