首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

当逻辑坐标很小且为分数时,如何设置QPainter窗口?

当逻辑坐标很小且为分数时,可以通过以下步骤来设置QPainter窗口:

  1. 创建一个QWidget或QMainWindow的子类作为窗口容器,例如MyWindow。
  2. 在MyWindow的构造函数中,设置窗口的大小和标题等属性。
代码语言:txt
复制
MyWindow::MyWindow(QWidget *parent) : QMainWindow(parent)
{
    setFixedSize(800, 600); // 设置窗口大小为800x600
    setWindowTitle("My Window"); // 设置窗口标题为"My Window"
}
  1. 重写MyWindow的paintEvent函数,在该函数中进行绘图操作。
代码语言:txt
复制
void MyWindow::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
    
    // 设置逻辑坐标系
    painter.setRenderHint(QPainter::Antialiasing); // 抗锯齿
    painter.setWindow(0, 0, 1, 1); // 设置逻辑坐标系的范围为[0, 1]x[0, 1]
    
    // 绘制图形
    painter.drawLine(QPointF(0.2, 0.2), QPointF(0.8, 0.8));
    painter.drawRect(QRectF(0.3, 0.3, 0.4, 0.4));
    painter.drawText(QPointF(0.5, 0.5), "Hello, World!");
}

在上述代码中,通过调用painter.setWindow函数来设置逻辑坐标系的范围为[0, 1]x[0, 1],表示逻辑坐标系的宽度和高度都是1。然后使用QPainter的绘图函数来绘制图形,这些函数的参数都是逻辑坐标。

  1. 在main函数中创建MyWindow对象并显示窗口。
代码语言:txt
复制
int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    
    MyWindow window;
    window.show();
    
    return app.exec();
}

通过以上步骤,就可以设置一个QPainter窗口,使其适应逻辑坐标很小且为分数的情况。在绘图时,可以使用逻辑坐标进行精确的定位和绘制。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

28.QT-QPainter介绍

*16); //绘画角度为30°~(30+150°) QPainter-视口/窗口 在Qt中, QPainter可以通过视口和窗口设置自身组件大小位置....视口:  基于QPaintDevice类组件的坐标实现的,属于物理坐标,通过setViewport成员函数设置 窗口:  基于自身的逻辑坐标实现的,并不是真实坐标,可以通过setWindow成员函数设置...需要注意的是: Qpainter坐标是使用的窗口坐标(逻辑坐标) QPainter初始化时,视口和窗口坐标默认是相同的,也就是说原点(0,0)在于窗口左上角 所以视口和窗口的最小坐标和最大坐标是从左上到右下的...示例1-设置原点(0,0)为窗口的(100,100),设置绘画区域为窗口大小为100*100 如下图所示,其中蓝色为视口坐标,红色为窗口坐标: ?...示例2-在窗口的中心处绘制正弦波 QPainter painter(this); painter.setViewport(50,50,width()-100,height()-100); //设置视口为中心处

1.8K20

Qt中国象棋一—— Qt 2D 绘图入门

一、坐标系统 在了解如何画出一个图形前,需要知道窗口部件的坐标系统。如图,左上角顶点是坐标原点(0,0),X轴向右为正,Y轴向下为正,默认每个像素占1×1大小的像素。...1)窗口部件第一次显示,系统会自动产生一个绘图事件 2)重新调整窗口部件大小 3)窗口部件被其他部件遮挡,然后又再次显示出来时,就会对隐藏的区域产生一个重绘事件 void Widget::paintEvent...(QPainter::Antialiasing); // 设置画笔颜色 painter.setPen(QColor(0, 160, 230)); // 绘制直线 painter.drawLine...(QPointF(0 ,0), QPointF(width() / 2, height() / 2)); } 在重新实现的事件函数中,先定义一个QPainter并传入this,之后设置画笔属性,...三、画文本与画矩形 这次是绘图逻辑分离出来,然后在paintEvent(QPaintEvent *event)中调用。

1.8K10
  • Qt坐标系统

    坐标变换 World Corrdinates ==> Window Coordinates ==> Device Coordinates (逻辑坐标) 世界变换 中间态坐标 窗口视口变换 (物理坐标...世界变换 世界变换直接相关的函数: QPainter::setWorldMatrixEnabled 启用、禁用世界变换 QPainter::setWorldTransform 设置世界变换 QPainter...窗口视口变换 直接相关: QPainter::setViewTransformEnabled 启用、禁用 视口变换 QPainter::viewTransformEnabled 返回 视口变换的状态 QPainter...::setViewport 设置 视口(物理坐标QPainter::setWindow 设置 窗口(与视口是同一矩形,中间态坐标) 该变换是简单的线性变换。...QPainter需要的逻辑坐标 仿射变换、透射变换 Qt4.3(包括)之前的 QMatrix 只支持仿射变换(Affine transformation)。

    1.7K30

    PyQt 自定义窗口部件(三)

    本篇介绍用如何QPainter()画出一个可以显示混合流体流速的Y形管控件。 ? Y形管由abci、edcf 以及cihgf三部分组成,内部的颜色由流体的流速决定。各个部分均使用逻辑坐标系绘制。...(self)# 创建QPainter实例,注意self!...#设置绘图“视口”(使用物理坐标系),参数(整形)分别为左上角的x和y,以及视口的宽和高 painter.setViewport((self.width() - side) / 2, (...self.height() - side) / 2, side, side) #设置绘图“窗口”(使用逻辑坐标系),参数(整形)分别为左上角的x和y,以及“窗口”的宽和高...#之后逻辑坐标系 (Qpainter自动会将逻辑坐标按比例映射到物理坐标) painter.setWindow(0, 0, LogicalSize, LogicalSize)

    60220

    Qt 之图形(QPainter 的基本绘图)「建议收藏」

    QPaintDevice 不直接绘制物理显示画面,而利用逻辑界面的中间媒介。...例如,绘制矩形图形,为了将对象绘制到 QWidget、QGLPixelBuffer、QImage、QPixmap、QPicture 等多种界面中间,必须使用 QPaintDevice。...窗口程序需要升级或者重新绘制,调用此成员函数。使用 repaint()和 update() 后,调用函数 paintEvent()。 | 版权声明:一去、二三里,未经博主允许不得转载。...最后调用 drawLine() 来实现直线的绘制,其中 QPointF(0, height()) 是指直线的起点坐标、QPointF(width() / 2, height() / 2) 是指直线的终点坐标...然后使用setBrush() 来设置画刷颜色(橙色),用来填充矩形区域,最后调用 drawRect() 来实现矩形的绘制,其中参数依次顺序为 x、y、w、h,是指区域从 x 为 50,y 为 50 的坐标点起

    5.3K40

    Qt示例-AnalogClock-自定义窗体-使用QPainter的转换和缩放特性简化绘图

    QBackingStore包含窗口内容的缓冲表示,因此通过使用QPainter只更新窗口内容的一个子区域来支持部分更新。...注意:event事件处理函数,它会处理窗口所有的事件,所以处理完自己需要的事件后,务必要调用基类的event函数,否则,窗口的其余事件都无法得到有效的执行 protected: bool event...每当窗口的某个区域失效窗口系统就会发送expose事件,例如由于窗口系统中的expose发生变化。...这种情况发生,应用程序应该停止显现,因为它对用户不再可见。 注意:在第一次显示窗口,resize事件总是在expose事件之前发送。...这里使用一个比例因子,使用x和y坐标在-100和100之间,保证绘制的图形在窗口最短边的范围内。 ? image.png //通过向量(dx, dy)转换坐标系。

    2.2K10

    python GUI库图形界面开发之PyQt5简单绘图板实例与代码分析

    = QPoint() self.endPoint = QPoint() #初始化 self.initUi() def initUi(self): # 窗口大小设置为600*500 self.resize...(self.pix) # 根据鼠标指针前后两个位置绘制直线 pp.drawLine(self.lastPoint, self.endPoint) # 让前一个坐标值等于后一个坐标值, # 这样就能实现画出连续的线...self.lastPoint = self.endPoint painter = QPainter(self) #绘制画布到窗口指定位置处 painter.drawPixmap(0, 0, self.pix...self.pix)         # 根据鼠标指针前后两个位置绘制直线         pp.drawLine(self.lastPoint, self.endPoint)         # 让前一个坐标值等于后一个坐标值...Qt.LeftButton:             self.endPoint = event.pos()             # 进行重新绘制             self.update() 释放鼠标

    1.4K31

    C++ Qt开发:Charts绘图组件概述

    setBackgroundBrush(const QBrush &brush) 设置视图的背景刷。 viewport() const 获取视口窗口部件,即视图的直接子部件。...viewport() const 获取视口窗口部件,即视图的直接子部件。 这些方法提供了对QGraphicsView的各种设置和操作,用于管理视图的外观和行为。...设置图表属性: 设置图表的渲染提示,以提高图表的渲染质量。 设置图表的主题色。 创建坐标轴: 创建 X 轴和 Y 轴对象,并设置它们的范围、标题、格式和刻度。 为每个序列设置相应的坐标轴。...,如下图所示; 1.3 绘制柱状图 与饼状图的绘制方法一致,在绘制柱状图只需要根据QBarSeries类的定义对特有元素进行填充即可,数据集被填充后既可以直接调用绘图方法将数据刷新到组件上。...; 至此本章内容就结束了,通过本章内容读着应该能掌握GraphicsView绘图组件是如何提升的,并如何利用该组件实现简单的绘制工作,从下一章开始我们将依次深入分析常用的图形类,并实现一个更加实用的小功能

    98010

    Qt坐标绘图

    坐标系简介 Qt中每一个窗口都有自己的一个坐标系,默认窗口左上角为坐标原点(0,0),然后水平向右依次增大(X轴),垂直向下依次增大(Y轴)。...坐标系变换。 坐标系变换是利用变换矩阵来进行的,我们可以利用QTransform类来设置变换矩阵,因为一般我们不需要进行更改,所以这里不在涉及。...yellow );          paint.drawEllipse(0, 0, 100, 100 ); } 效果图如下: 这里,painter.shear(0,1),是对纵向进行扭曲,0表示不扭曲,将第一个...这里的painter.translate(100,100)将(100,100)设置为新的原点,想让直线以其为中心进行旋转,可是你已经发现效果并非如此。是什么原因呢?...坐标系状态的保护。 我们可以先利用save()函数来保存坐标系现在的状态,然后进行变换操作,操作完之后,再用restore()函数将以前的坐标系状态恢复,其实就是一个入栈和出栈的操作。

    2K30

    PySide6 GUI 编程(42):QPainter 的使用

    QPainter 还可以绘制对齐文本和图片。 通常,它使用“自然”坐标系进行绘图,但也支持视图和世界坐标转换。...对象使用, 或者在某些情况下可能会导致内存泄漏,特别是当你在一个循环中多次使用QPainter对象, 如果不调用end()方法,可能会导致程序崩溃或者运行效率降低...画图的步骤为: 设置画布大小 self.pixmap = QPixmap(400, 300) 初始化QPainter self.painter = QPainter(self.pixmap) 设置画笔...对象使用, 或者在某些情况下可能会导致内存泄漏,特别是当你在一个循环中多次使用QPainter对象, 如果不调用end()方法,会导致程序崩溃或者运行效率降低...100 ,矩形将会变为圆形。

    20386

    Qt的双缓冲技术(double buffering)

    2、 只对窗口部件的一部分进行重绘,另外一部分就不需要重绘,也变成了简单的内存复制——将当前界面不需要重绘的像素复制到脱屏像素,再在脱屏像素上完成剩余的绘制,再通过内存复制映射到屏幕显示上。...syszuxRotate(float angle) { this_angle=angle; refreshPixmap(); update(); } 1、 SYSZUXpad...{ QPoint(this_width/2, 10), QPoint(this_width/2+5, 20), QPoint(this_width/2-5, 20) };//箭头的坐标...painter.initFrom(this);函数可以设置painter所使用的画笔、背景色、字体,让其和this控件一样。...比如在SYSZUXpad上运行 GemfieldFuwaArrow程序时,双缓冲cpu的利用率是50%,而没有采用双缓冲,cpu的利用率是37%。

    2.1K20

    图像标注版本4-多标注框+标注标签+高亮和删除标签

    4.0版本在3.0版本基础上增加了双击某个位置,如果这个位置在标注框内,则对选中的标注框进行标识出来,同时提示是否要删除当前选中的标注框,进行删除处理。...在这个版本中首先需要增加双击事件,在双击事件中对当前鼠标位置是否属于某个标注框进行遍历,某个位置可能属于多标注框,则按照先入后出的原则,进行删除。...return # 单击鼠标触发事件 # 获取鼠标事件的开始位置 def mousePressEvent(self, event): # 将绘制标志设置为....y() self.update() # 鼠标释放事件 def mouseReleaseEvent(self, event): # 将绘制标志设置为...这样就不用画出实时框了 self.x1RealTime = self.x0 self.y1RealTime = self.y0 # 修正单击鼠标的保存事件bug,开始坐标等于结束坐标

    24310

    26.QT-模型视图之自定义委托

    在上一章学习 25.QT-模型视图 后,本章接着学习视图委托 ---- 视图委托(Delegate)简介 由于模型负责组织数据,而视图负责显示数据,所以当用户想修改显示的数据,就要通过视图中的委托来完成...初探自定义委托类  委托属于视图的子功能 视图主要负责组织具体数据项的显示方式(是列表方式,还是树形方式,还是表格方式) 委托主要负责具体数据项的显示和编辑,比如用户需要编辑某个数据,则需要弹出编辑框...parent, QStyleOptionViewItem & option, QModelIndex & index ) ; //创建编辑器,并返回该编辑器, option包含了该数据项的具体信息(比如:数据项窗口大小...// hint 参数用来指定当用户完成编辑后,应该显示什么标记,用来提示用户已完成编辑 void commitData ( QWidget * editor ) ; //完成编辑数据后,发送该信号...深入自定义委托类 之前我们写的自定义委托,每次都需要双击某个数据项,才能弹出编辑器 那如何让委托一直呈现在视图显示上呢?

    2.2K20

    python GUI库图形界面开发之PyQt5窗口背景与不规则窗口实例

    QPalette设置窗口背景 使用QPalette(调试板)来设置背景图片时,需要考虑背景图片的尺寸 图片尺寸可以文件管理器打开,右键属性查看 背景图片的宽度高度大于窗口的宽度高度,背景图片会平铺整个背景...背景图片宽度高度小于窗口的宽度高度,则会加载多个背景图片 实例:QPalette设置窗口背景 import sys from PyQt5.QtWidgets import QMainWindow,...# # # todo 2 背景图片的宽度和高度小于窗口的宽度和高度 # win.resize(800, 600) win.show() sys.exit(app.exec_()) 背景图片的宽度高度大于窗口的宽度高度...背景图片宽度高度小于窗口的宽度高度,则会加载多个背景图片 ?...# # # todo 2 背景图片的宽度和高度小于窗口的宽度和高度 # win.resize(800, 600) PaintEvent设置窗口背景 import sys from PyQt5.QtWidgets

    2.9K22

    python GUI库图形界面开发之PyQt5信号与槽事件处理机制详细介绍与实例解析

    PyQt5中信号与槽可以说是对事件处理机制的高级封装,如果说事件是用来创建窗口控件的,那么信号与槽就是用来对这个控件进行使用的,比如一个按钮,当我们使用按钮,只关心clicked信号,至于这个按钮如何接受并处里鼠标点击事件...,然后在发射这个信号,则不关心,但是如果要重载一个按钮,这时候就要关心了,比如可以改变它的行为:在鼠标按下触发clicked信号,而不是释放 PyQt5常见事件类型 pyqt是对Qt的封装,qt程序是事件驱动的...globalPos = self.mapToGlobal(event.pos()) self.text = """鼠标位置: 窗口坐标为:QPoint({0}, {1}) 屏幕坐标为:QPoint(...实现鼠标移动事件 '''重新实现鼠标移动事件''' def mouseMoveEvent(self, event): #如果没有鼠标双击,执行 if not self.justDoubleClicked: # 窗口坐标转换为屏幕坐标...globalPos = self.mapToGlobal(event.pos()) self.text = """鼠标位置: 窗口坐标为:QPoint({0}, {1}) 屏幕坐标为:QPoint(

    2.6K21
    领券