setWindow(int x, int y, int width, int height):
逻辑坐标,可理解为截取窗口矩形区域显示到设备上,当画的内容超过窗口本身大小时,拉大窗口,不会显示超过部分
setViewport(int x, int y, int width, int height):
设备坐标,可理解为目标设备的显示矩形区域,当画的内容超过窗口本身大小时,拉大窗口,会显示超过部分
个人理解:
最终不管设置哪种模式,看到的都是窗体上显示图形。也就是窗口 与 设备的映射关系。
setWindow就是窗口范围内容要显示到设备(所有设备范围内)上,所以拉大窗口中,图会变大
setViewport就是窗口内容(全部窗口范围)要显示到指定设备范围内,所以拉大窗口中,看上去图会小
以下代码,新建窗口大小为400,400
代码1
QPainter painter(this);
painter.setBrush(Qt::red);
painter.fillRect(10, 10, 100, 100, QBrush(QColor(255, 0, 0, 255)));
注: 在窗口上显一个红色正方体
代码2
QPainter painter(this);
painter.setWindow(10, 10, 400, 400);
painter.setBrush(Qt::red);
painter.fillRect(10, 10, 100, 100, QBrush(QColor(255, 0, 0, 255)));
注: 红色矩形原点和窗口原点看上去都是0,0,拉大窗体,会发现矩形相应的显示变大
代码3:
QPainter painter(this);
painter.setViewport(-10, -10, 400, 400);
painter.setBrush(Qt::red);
painter.fillRect(10, 10, 100, 100, QBrush(QColor(255, 0, 0, 255)));
注:注意viewport x,y是 -10,-10,红色矩形原点和窗口原点看上去都是0,0,拉大窗体,会发现矩形相应的显示变小
网友评论