在Qt中常常要自己重载一些paintEvent函数,这个时候往往忽略了两个很关键的API,那就是setViewport和setWindow. Viewport,顾名思义,反应的是物理坐标,就是你实际想在当前坐标系下哪块区域画图,比如(50,50,100,100)的一个rect. Window而是逻辑坐标,你可以设置它从(0,0)开始,这样你可以setViewport(m_rect)之后,setWindow(0, 0, m_rect.width(), m_rect.height())来重新把物理坐…
简述 Qt中提供了强大的2D绘图系统,可以使用相同的API在屏幕和绘图设备上进行绘制,它主要基于QPainter.QPaintDevice和QPaintEngine这三个类. QPainter用来执行绘图操作,其提供的API在GUI或QImage.QOpenGLPaintDevice.QWidget和QPaintDevice显示图形(线.形状.渐变等).文本和图像. QPaintDevice不直接绘制物理显示画面,而利用逻辑界面的中间媒介.例如,绘制矩形图形时,为了将对象绘制到QWidget.Q…
这两天在使用QPainter的过程中出现了一些问题,记录一下. 测试程序很简单,写一个继承自QWidget的类,重载其paintEvent函数进行绘图. case1: 在paintEvent函数中使用一个临时的painter对象进行绘制. 结果:能够正常绘制. case2: 在paintEvent函数中动态分配一个painter对象进行绘制. 结果:能够正常绘制. case3:将Painter声明为一个类的成员变量进行绘制. 结果:不能正常绘制 分析:由于我在初始化m_painter时,用到的是…
一.重绘事件 前面讲到的所有绘制操作都是在重绘事件处理函数paintEvent()中完成的,是QWidget类中定义的函数.一个重绘事件用来重绘一个部件的全部或者部分区域,下面几个原因中的任意一个都会发生重绘事件: repaint()函数或者update()函数被调用: 被隐藏的部件现在被重新显示: 其他一些原因. 大部分部件可以简单地重绘它们的全部界面,但是一些绘制比较慢的部件需要进行优化而只绘制需要的区域(可以使用QPaintEvent::region()来获取该区域).Qt也会通过合并多个…
主要是给自己以后参考,所以不会太仔细的讲解. #include "mainwindow.h" #include <QApplication> #include<QDebug> int main(int argc, char *argv[]) { QApplication a(argc, argv); MainWindow w; w.resize(,);//不包含边框的内部矩形区域的大小 w.move(,);//窗口左上角在电脑屏幕上的坐标 w.show(); q…
一.抗锯齿渲染 1.1 逻辑绘图 图形基元的大小(宽度和高度)始终与其数学模型相对应,下图示意了忽略其渲染时使用的画笔的宽度的样子. 1.2 物理绘图(默认情况) 在默认的情况下,绘制会产生锯齿,并且使用这样的规则进行绘制: 当使用宽度为一个像素的画笔进行渲染时,像素会在数学定义的点的右边和下边进行渲染,如下图1所示.当使用一个拥有偶数像素的画笔进行渲染时,像素会在数学定义的点的周围对称渲染:而当使用一个拥有奇数像素的面笔进行渲染时,首先按照偶数对称绘制,最后一个像素会被渲染到数学定义的点的右边…
2D绘图 Qt4中的2D绘图部分称为Arthur绘图系统.它由3个类支撑整个框架,QPainter,QPainterDevice和QPainterEngine.QPainter用来执行具体的绘图相关操作 如画点,画线,填充,变换,alpha通道等.QPainterDevice是QPainter用来绘图的绘图设备,Qt中有几种预定义的绘图设备,如QWidget,QPixamp,QPrinter 等.他们都从QPaintDevice继承.QPaintEngine类提供了不同类型设备的接口,QPain…
提要 需求:载入一张图片并显示,能够放大缩小,能够截取图片的某个矩形并保存. 原以为蛮简单的一个功能,事实上还是有点小复杂. 最简单Qt图片浏览器能够參考Qt自带的Demo:Image Viewer Example 看一下终于的实现效果: 图片的载入显示 这里须要实现一个QImageViewer的类.继承自QWidget. 图片用QPixmap来载入和显示,还有三个成员各自是图片的缩放因子,图片是否已经载入,viewer是否已经初始化,是否处于裁剪状态. private: QPixmap m_p…
1:QRegExp 正则表达式 QRegExp regExp("[a-zA-Z][1-9][0-9]{0,2}"); xxx->setValidator(new QRegExpValidator(regExp,this)); lineEdit->setValidator(new QRegExpValidator(regExp,this));   2:QObject::connect() connect(objectA,SIGNAL(methodA()),objectB,SL…
一 .  QT4和QT5的区别(信号和槽):1.  QT4: connect(button,SIGNAL(pressed()),this,SLOT(close())); /** * 优点 :写法简单 * 缺点: SIGNAL(), SLOT()是两个宏,将函数转换为字符串 * 编译时不做错误检查,影响程序的健壮性 */ 2.  QT5 connect(button,&QPushButton::clicked,this,&Widget::close); /** * sender: 信号发出者…