【发布时间】: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