Qt 视口和窗口

绘图设备的物理坐标是基本的坐标系,通过QPainter平移 旋转等变换可以得到更容易操作的逻辑坐标

视口: 绘图设备的任意一个矩形区域的物理坐标,可以只选取物理坐标的一个矩形区域用于绘图。视口默认情况下等于绘图设备的整个矩形区。

QPaintset::setViewport(int x , int y, int width ,int height)定义视口

窗口: 对应于视口的矩形区域,只不过是用逻辑坐标定义的坐标系,窗口坐标的中心在矩形中心

QPaintset::setWindow(int x , int y, int width ,int height)

 1 #include "viewport.h"
 2 #include "ui_viewport.h"
 3 #include <QPainter>
 4 #include <QPen>
 5 #include <QBrush>
 6 #include <QtMath>
 7 #include <QLinearGradient>
 8 viewport::viewport(QWidget *parent) :
 9     QWidget(parent),
10     ui(new Ui::viewport)
11 {
12     ui->setupUi(this);
13     setWindowTitle("视口和窗口");
14 }
15
16 viewport::~viewport()
17 {
18     delete ui;
19 }
20
21 void viewport::paintEvent(QPaintEvent *event)
22 {
23     QPainter painter(this);
24     int w = width();
25     int h = height();
26     int side = qMin(w,h);
27     QRect rect((w-side)/2,(h-side)/2,side,side);
28     painter.drawRect(rect);
29     painter.setViewport(rect);            // 设置ViewPort
30     painter.setWindow(-100,-100,200,200); // 设置窗口 逻辑坐标
31     painter.setRenderHint(QPainter::Antialiasing);
32
33     QPen pen;
34     pen.setWidth(2);
35     pen.setColor(Qt::red);
36     pen.setStyle(Qt::SolidLine);
37     painter.setPen(pen);
38
39     QLinearGradient linerGrad(0,0,100,0);
40     linerGrad.setColorAt(0,Qt::yellow);
41     linerGrad.setColorAt(1,Qt::green);
42     linerGrad.setSpread(QGradient::PadSpread);
43     painter.setBrush(linerGrad);
44
45     //设置复合模式
46     painter.setCompositionMode(QPainter::RasterOp_SourceXorDestination);
47
48     for(int i = 0 ; i < 36 ; i++)
49     {
50         painter.drawEllipse(QPoint(50,0),50,50);
51         painter.rotate(10);   //画完一个圆以后坐标系旋转10度
52
53     }
54 }

不同叠加参数可以获取不同的图

原文地址:https://www.cnblogs.com/AmyBKLP/p/11704755.html

时间: 2024-10-27 20:10:32

Qt 视口和窗口的相关文章

关于MFC视口与窗口原点的设置

最近在做一个类似Coreldraw的绘图软件,MFC的坐标机制确实有点烦人,首先,在设视口与窗口原点之前,我们必须设置好MFC的坐标映射模式,用SetMapMode()函数. (1)视口原点的位置(就是画笔dc的初始位置)仅仅由SetViewportOrgEx (x,y) 函数 来移动.(x,y)是相对于客户区左上角的设备坐标,即像素),而SetWindowOrg (X,Y )设置窗口的逻辑坐标点(X,Y)映射为的设备环境的设备点(0,0)(单位为逻辑坐标单位) (2)其实既然叫做“映射模式”,

QT中关于窗口全屏显示与退出全屏的实现

近期在学习QT时遇到了很多问题这也是其中一个,个人通过在各种书籍和网络上的查阅找到了一些关于这方面的答案,希望能给大家一些帮助. 首先,在QT中对于窗口显示常用的有这么几个方法可以调用: Qt全屏显示函数            showFullScreen() Qt最大化显示函数         showMaximized()Qt最小化显示函数         showMinimized()Qt固定尺寸显示函数      resize(x,y)Qt设置最大尺寸函数      setMaximum

Qt 之 设置窗口边框的圆角(使用QSS和PaintEvent两种方法)

Qt在设置窗口边框圆角时有两种方式,一种是设置样式,另一种是在paintEvent事件中绘制窗口.下面分别叙述用这两种方式来实现窗口边框圆角的效果. 一.使用setStyleSheet方法 this->setStyleSheet(“QWidget{border-top-left-radius:15px;border-top-right-radius:5px;}”)); 使用的主要是使用border-radius 属性,关于这个属性,可选的样式有 border-top-left-radius 设置

QT:不规则窗口的实现

主要思路:1:将窗体设为Qt::FramelessWindowHint(去掉标题栏).2:用一幅有部分区域是透明的图片作为程序的界面,并将图片透明的地方设为穿透. 3:重载程序的鼠标事件. 运行时截图(浅绿色的是桌面背景) 源代码: [cpp] view plaincopyprint? #include <QtGui> class IrregularWidget : public QWidget { Q_OBJECT public: IrregularWidget(QWidget *paren

Qt 程序和窗口添加图标

Qt项目在打包发布之后都需要有个个性的程序图标和窗口图标,这样会使程序更加美观大方,下面我们分别来看如何给程序和窗口分别添加图标.我们需要两种格式的图片,一种是.ico的,用来给程序添加图标,一种是.bmp或是.png的,用来给窗口添加图标. - 程序添加图标 如果使用的Qt Creator,那么用记事本创建一个后缀为.rc的资源文件,然后再其中添加: IDI_ICON1 ICON DISCARDABLE "xxx.ico" 注:xxx.ico为图标文件名称 然后修改工程文件(*.pr

Qt 编写多窗口程序

该文章原创于Qter开源社区(www.qter.org),作者yafeilinux,转载请注明出处! 导语 程序要实现的功能是:程序开始出现一个对话框,按下按钮后便能进入主窗口,如果直接关闭这个对话框,便不能进入主窗口,整个程序也将退出.当进入主窗口后,我们按下按钮,会弹出一个对话框,无论如何关闭这个对话框,都会回到主窗口. 程序里我们先建立一个工程,设计主界面,然后再建立一个对话框类,将其加入工程中,然后在程序中调用自己新建的对话框类来实现多窗口. 在这一篇还会涉及到代码里中文字符串显示的问题

Qt Widgets——主窗口及其主要组成部分

Main Window and Related Classes QAction 动作类,用于当做一个菜单项或工具项插入菜单或工具栏 QActionGroup 动作组,用于管理多个动作,设置它们之间的互斥性等 QWidgetAction 部件动作,继承自QAction,用于将小部件插入菜单或工具栏 QDockWidget 悬浮部件,程序运行后可鼠标拖动的部件 QMainWindow 主窗口,是其它部件的容器 QMdiArea 子区域,加到QMainWindow中,用于放置多个QMdiSubWind

Qt图片自适应窗口控件大小(使用setScaledContents)

最近在用Qt设计一个小程序,想让一幅图片自适应窗口大小,由于本人比较笨,一直找不到好方法.找到了很多方法但都会出一些小问题, 刚刚摸索出解决办法了,在些记录. 思想: 1 显示图像是用QLabel2 在QWidget或其他窗口部件上显示(也可直接显示在窗口上,后面会说明为什么不) 现在问题就明朗了,主要就是调整QLabel大小随窗口大小自动变化. 使用方法: 1 在要显示的窗口放置一个QWidget,并使用用布局管理器(以便窗口可以规范布局) 2 在QWidget内放置QLabel ,位置为左上

QT两个窗口间的相互切换

信号(signals)与槽(slots)是QT重要机制,例子使用了C++11 lambda表达式进行了信号与槽的连接. 实现两个窗口通过点击按钮完成互相切换,注意子窗口只能发送信号,不能处理,所有信号应在主窗口定义相应处理槽函数处理. 主窗口: mywidget.h #ifndef MYWIDGET_H#define MYWIDGET_H #include <QWidget> #include <QPushButton> #include "win_1.h" c