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,表示所画图像的大小就是你最开始画的大小。随着窗口的变大变小,图像也会随之等比例变化。该方法的缺点是,如果图像是圆且横纵向变化比例不同,会有失真的情况。我是这么解决的,加了行代码:
这样可以使横纵向变化比例一致。
第二种方法,在窗口中加一个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控件随窗口自适应变化的代码大家可以自行搜索一下。
第一种方法,用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控件随窗口自适应变化的代码大家可以自行搜索一下。
相关文章推荐
- Qt实现图像自适应窗口大小之scaled()函数使用
- qt中使用scrollarea控件显示滚动条随窗口自适应变化
- Qt实现图像自适应窗口大小之scaled()函数使用
- QT5.8使用opencv打开图像窗口大小根据图像自适应调节
- Qt 根据Label大小无形变的自适应居中显示图像
- 控件自适应窗口最大化后的位置变化
- Qt图片自适应窗口控件大小
- D3D显示YUV窗口大小变化图像不失真
- Qt控件随窗口大小变化的设置方法(QTDesigner)
- EasyUi tabs的高度与宽度根据IE窗口的变化自适应代码
- Qt图片自适应窗口控件大小
- Qt中将Layout设为centralWidget的方法(让窗口里面的部件随窗口大小变化而变化的方法)
- Qt软件开发文档15---聊天窗口的实现(2),QTextEdit+QPainter实现聊天框自适应大小
- jqGrid随窗口大小变化自适应大小的示例代码
- 【QT】QT从零入门教程(七):图像适应窗口
- Qt Quick Designer生成的图形可以自适应窗口的大小变化
- 《转》QT界面怎么使控件随窗口大小变化一直居中显示
- Qt控件随窗口大小变化的设置方法(QTDesigner)
- Qt 图像剧中显示 和 图像适应窗口大小
- 关于Qt窗口部件自适应大小设计(随窗户大小改变)