您的位置:首页 > 编程语言 > Qt开发

QT中用QPainter类所画图像随窗口变化自适应变化

2017-07-19 18:02 288 查看
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);
painter.scale(min,min);

这样可以使横纵向变化比例一致。

第二种方法,在窗口中加一个label控件,这个控件实际上是为了起到一个定位的作用。将所画图片的起始点、宽和高都用label的起点、宽和高来表示,不用具体的数值。用控制label大小变化大方法来控制图像的大小变化。例如:

QPixmap pix = QPixmap("D:/code_source/Qt/Qtpicture/Qtpicture/Debug/image/gradienter.png");
painter->drawPixmap(-ui->label->width() / 2, -ui->label->height() / 2, ui->label->width(), ui->label->height(), pix);
这里只是举了一个图像坐标表示方法的例子,具体的label控件随窗口自适应变化的代码大家可以自行搜索一下。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: