【问题标题】:Lines thickness changes spontaneously when scaling QGraphicsView缩放 QGraphicsView 时线条粗细会自发变化
【发布时间】:2019-07-17 07:41:47
【问题描述】:

我正在使用图形视图框架在 Qt 中绘制线条。由于我希望我的图片在调整窗口大小时占据相同部分的空间,所以我覆盖 MainWindow::resizeEvent,以便根据调整大小事件重新调整图形视图:

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 像素粗细。

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

【问题讨论】:

    标签: qt qgraphicsview qgraphicsscene


    【解决方案1】:

    您需要在 QPen 中将您的线条图设置为“化妆品”。这使得线条不可缩放。否则,Qt 会随着视图的缩放而缩放线宽。查找 QPen::setCosmetic。默认情况下,画线不是装饰性的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-17
      • 1970-01-01
      • 2015-12-12
      • 2022-07-05
      相关资源
      最近更新 更多