在QWidget上绘画以覆盖整个小部件

时间:2015-12-30 09:47:36

标签: qt plot drawing qwidget qpainter

我在窗口中有一个QWidget。窗口可以调整大小,窗口小部件应该伸展以覆盖可能的最大区域。我在这个QWidget上绘制了一个情节,我想让情节随着窗户拉伸。目前它有效,但我觉得我可以这样干净利落。

它的外观如下:

Before resize

调整大小后,这就是我想要的样子:

After resize

目前这有效,但我这样做:

在小部件paintEvent()中,我像这样计算比例因子

double scaleFactorX = (double) width() / m_xAxis.last();
double scaleFactorY = (double) height() / m_yAxis.last();

*请注意,m_xAxis.last()是将绘制的最大值。 width()和height()返回QWidget的宽度和高度。

然后,当我绘制元素时,我将每个点乘以比例因子,将其拉伸到QWidget的宽度。我觉得这样做的方式更好(更正确),但我不知道该怎么做。

任何帮助都将不胜感激。

1 个答案:

答案 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");
}