【qt】视口和窗口坐标

简介: 【qt】视口和窗口坐标

一.视口和窗口坐标的原理

在绘图事件中进行绘图

void Widget::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
    QRect rect(200,0,200,200);
    painter.drawRect(rect);
    //设置视口的范围,相当于一个窗口
    painter.setViewport(rect);
    //设置窗口坐标,这是逻辑大小,可以自己任意设计
    //左上角的坐标为(-50,-50),长为100,宽为100,这是逻辑大小
    //原本我们的设置的视口范围为长200,宽200
    painter.setWindow(-50,-50,100,100);
    QPen pen;
    pen.setColor(Qt::blue);//换个颜色区分
    painter.setPen(pen);
    painter.drawRect(QRect(0,0,50,50));
}

运行结果;

原理:

二.视口和窗口坐标的好处

1.我们可以自定义窗口的坐标大小(逻辑大小)

2.视口里面的绘图可以自适应视口大小的变化.

三.演示好处

void Widget::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
    int minSide=qMin(this->width(),this->height());//取最小的窗口边
    QRect rect((this->width()-minSide)/2,(this->height()-minSide)/2,minSide,minSide);
    painter.drawRect(rect);
    painter.drawEllipse(QPoint(200,200),50,50);//圆心,水平半径,垂直半径
}

运行结果:

这个矩形可以随窗口的变化而变化.但是这个圆不可以.

现在我们开始添加视口和窗口.

void Widget::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
    int minSide=qMin(this->width(),this->height());//取最小的窗口边
    QRect rect((this->width()-minSide)/2,(this->height()-minSide)/2,minSide,minSide);
    painter.drawRect(rect);
    painter.drawEllipse(QPoint(200,200),50,50);
    painter.setViewport(rect);
    painter.setWindow(-100,-100,200,200);
    QPen pen;
    pen.setColor(Qt::red);
    painter.setPen(pen);
    int count=10;
    for(int i=0;i<count;i++)
    {
        painter.drawEllipse(QPoint(50,0),50,50);
        painter.rotate(360/count);//坐标旋转
    }
}

运行结果:

自适应:

四.总结

记住setViewportsetWindow就可以了!

马上姚期末考试了!

相关文章
|
3月前
【Qt 学习笔记】Qt窗口 | 标准对话框 | 消息对话框QMessageBox
【Qt 学习笔记】Qt窗口 | 标准对话框 | 消息对话框QMessageBox
565 4
【Qt 学习笔记】Qt窗口 | 标准对话框 | 消息对话框QMessageBox
|
3月前
|
C++ Windows
Qt 窗口置顶
Qt 窗口置顶
106 1
|
3月前
【Qt 学习笔记】Qt窗口 | 标准对话框 | 文件对话框QFileDialog
【Qt 学习笔记】Qt窗口 | 标准对话框 | 文件对话框QFileDialog
692 4
|
3月前
【Qt 学习笔记】Qt窗口 | 标准对话框 | 输入对话框QInputDialog
【Qt 学习笔记】Qt窗口 | 标准对话框 | 输入对话框QInputDialog
236 3
|
3月前
|
数据可视化
【Qt 学习笔记】Qt窗口 | 标准对话框 | 字体对话框QFontDialog
【Qt 学习笔记】Qt窗口 | 标准对话框 | 字体对话框QFontDialog
74 3
|
3月前
【Qt 学习笔记】Qt窗口 | 标准对话框 | 颜色对话框QColorDialog
【Qt 学习笔记】Qt窗口 | 标准对话框 | 颜色对话框QColorDialog
512 3
|
3月前
|
算法 数据安全/隐私保护
【qt】启动窗口的玩法
【qt】启动窗口的玩法
29 0
|
3月前
【qt】多窗口开发
【qt】多窗口开发
57 0
|
4月前
|
数据安全/隐私保护 C++ 计算机视觉
Qt(C++)开发一款图片防盗用水印制作小工具
文本水印是一种常用的防盗用手段,可以将文本信息嵌入到图片、视频等文件中,用于识别和证明文件的版权归属。在数字化和网络化的时代,大量的原创作品容易被不法分子盗用或侵犯版权,因此加入文本水印成为了保护原创作品和维护知识产权的必要手段。 通常情况下,文本水印可以包含版权声明、制作者姓名、日期、网址等信息,以帮助识别文件的来源和版权归属。同时,为了增强防盗用效果,文本水印通常会采用字体、颜色、角度等多种组合方式,使得水印难以被删除或篡改,有效地降低了盗用意愿和风险。 开发人员可以使用图像处理技术和编程语言实现文本水印的功能,例如使用Qt的QPainter类进行文本绘制操作,将文本信息嵌入到图片中,
178 1
Qt(C++)开发一款图片防盗用水印制作小工具