我在窗口中有一个QWidget。窗口可以调整大小,窗口小部件应该伸展以覆盖可能的最大区域。我在这个QWidget上绘制了一个情节,我想让情节随着窗户拉伸。目前它有效,但我觉得我可以这样干净利落。
它的外观如下:
调整大小后,这就是我想要的样子:
目前这有效,但我这样做:
在小部件paintEvent()中,我像这样计算比例因子
double scaleFactorX = (double) width() / m_xAxis.last();
double scaleFactorY = (double) height() / m_yAxis.last();
*请注意,m_xAxis.last()是将绘制的最大值。 width()和height()返回QWidget的宽度和高度。
然后,当我绘制元素时,我将每个点乘以比例因子,将其拉伸到QWidget的宽度。我觉得这样做的方式更好(更正确),但我不知道该怎么做。
任何帮助都将不胜感激。
答案 0 :(得分:2)
您可以通过在QPainter上设置QTransform,以更简单/更易读的方式执行此操作。
doc的例子(当然你可能对.scale()比对.translate()更感兴趣):
void CombinedTransformation::paintEvent(QPaintEvent *)
{
QPainter painter(this);
painter.setPen(QPen(Qt::blue, 1, Qt::DashLine));
painter.drawRect(0, 0, 100, 100);
QTransform transform;
transform.translate(50, 50);
transform.rotate(45);
transform.scale(0.5, 1.0);
painter.setTransform(transform);
painter.setFont(QFont("Helvetica", 24));
painter.setPen(QPen(Qt::black, 1));
painter.drawText(20, 10, "QTransform");
}