请问一下Qpainter设置viewport和window的问题

王钢 2018-06-22 05:20:16


请问一下Qpainter设置viewport和window的问题。我设置了viewport和window应该是线性坐标变换的。和图2一样。
但是我加了一句painter.translate(0,100);后就不对了见图1.
只有将side设为100使得viewport和window大小一样才行。

请教为什么会这样?难道设置窗口和坐标移动不能一起用么?
void Widget::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
int x = 50;
int y = 50;
int side = 150;
//设置视口
QRect viewrect(x,y,side,side);
// painter.translate(0,100); //?????
painter.drawRect(viewrect);

painter.setViewport(viewrect);
painter.setWindow(0, 0, 100, 100);
painter.setBrush(Qt::green);
painter.drawRect(0, 0, 20, 20);

painter.drawLine(0,0,painter.window().width(),painter.window().height());
}
...全文
615 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
LittleFly4398 2018-10-31
  • 打赏
  • 举报
回复
本人水平有限,在这里简单说两几句自己对这个问题的推测。
1. 放大倍数是Viewport / Window,即横竖都是1.5倍
2. translate()和放大的本质都是矩阵变换,矩阵被这些变换逐层影响。
3. 平移也被放大影响从而变成原来的1.5倍了,因此绿色矩形平移量是150而不是100,因此它在第一个矩形下方50像素的位置
ooolinux 2018-06-30
  • 打赏
  • 举报
回复
qtcn也可以问问。
王钢 2018-06-30
  • 打赏
  • 举报
回复
好像是没人了。
待续_1006 2018-06-26
  • 打赏
  • 举报
回复
csdn真的没人了么?
王钢 2018-06-25
  • 打赏
  • 举报
回复
csdn真的没人了么?

16,216

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧