Qpainter类是QT中的一个画图类。该类是用画笔在窗口上直接绘制图像。通常情况下,图像的位置和大小在画图完成后就是定死的了。在实际应用中我们有时需要该图像随着窗口的拖动、最大化等操作下进行自适应变化。下面提出两种可以使所画图像可以随窗口自适应变化的方法。
第一种方法,用Qpainter类中的scale函数。代码如下:
QPainter painter(this);
static double wid = rect().width();
static double hei = rect().height();
painter.setRenderHints(QPainter::Antialiasing, true);//抗锯齿
double new_wid = rect().width()/wid;
double new_hei = rect().height()/hei;
painter.scale(new_wid, new_hei);
具体思路就是先获取当前窗口的宽和高保存到两个double变量中。在窗口变化后,将变化后的宽和高与最开始的宽和高作比,作为scale函数的参数。scale函数的两个参数分别是在横向和纵向上实际坐标和绘图坐标的比例关系。在窗口没有变动时,两个参数分别为1,1,表示所画图像的大小就是你最开始画的大小。随着窗口的变大变小,图像也会随之等比例变化。该方法的缺点是,如果图像是圆且横纵向变化比例不同,会有失真的情况。我是这么解决的,加了行代码:
double min = qmin(new_wid,new_hei);