当前位置: 首页 > news >正文

QT图形显示和处理1

首先我们必须要了解关于QT图形图像的基本知识:

QT的绘图系统是由QPainter,QPainterDevice和QPainterEngine来构成的。其中QPainter是用来绘制的类,QPainterDevice是提供绘制设备的类,而QPainterEngine是用来连接QPainter和QPainterDevice的,即在画画这个功能和绘画工具之间提供一个桥梁。

既然QPainter是用来画画的类,它就肯定会派生出很多子类,例如QWidget(也就是说QT控件基本都能在上面画画),例如QPixelmap,例如QPicture等等。

我们首先来绘制基本图形,这里我们单独建立一个单例类:

#pragma once
#include <QWidget>
#include "debugwidget.hpp"
class DebugImage : public DebugWidget {
	Q_OBJECT

public:
	static DebugImage* getDebugImage();
	~DebugImage();
	void paintEvent(QPaintEvent *event);

private:
	DebugImage(DebugWidget * parent = Q_NULLPTR);

};
extern DebugImage *di;
#include "debugimage.hpp"

static DebugImage *di = NULL;

DebugImage::DebugImage(DebugWidget * parent) : DebugWidget(parent) {

	show();
}

DebugImage::~DebugImage() {
	
}

DebugImage* DebugImage::getDebugImage() {
	if (di == NULL)
		di = new DebugImage;
	return di;
}

void DebugImage::paintEvent(QPaintEvent * event)
{
	QPainter painter(this);
	painter.drawLine(QPoint(0, 0), QPoint(50, 50));

}

源码之前在写的关于调试器的博客的相关部分已经讲过了,这里只是新建了一个QPainter,并在绘制事件里绘制了一个线段。放在事件里的好处:可以在对象产生变化的时候响应画画函数,之后添加如下代码:

        QPen pen(Qt::green,5,Qt::SolidLine,Qt::RoundCap,Qt::RoundJoin);
	QPainter painter(this);
	painter.setPen(pen);
	painter.drawLine(QPoint(0, 0), QPoint(150, 150));

可以在QT painter上面画一个线,QPen里面是设置线的参数和模式的,这里就不再加以介绍了。

除了画笔画线,还可以画很多图形,比如正方形圆形,也可以使用画刷来画填充物。我们简单来使用一下画刷,毕竟以后用到再查手册就好了。

添加程序:

上面是使用的图片。

        QBrush brush;
	brush.setTexture(QPixmap("./TEST_Graphics/1.png"));
	painter.fillRect(QRect(50,50,280,230),brush);

之后显示效果如下:

再说一下图形的抗锯齿性:

painter.setRenderHint(QPainter::Antialiasing);

可以显示出比较平整的效果,否则会感到边缘有锯齿感。

也可以使用渐变填充来填充物体,其实这些东西没有什么值得深究的,需要的时候查手册就可以了,下一节我们重点讲述坐标系统。

 

相关文章:

  • QT图形显示和处理2 坐标系统(重点)
  • QT图形显示和处理3 坐标系统(重点)
  • QT图形显示和处理4
  • QT图形显示和处理5
  • QT图形显示和处理6
  • QT图形显示和处理7
  • QT图形显示和处理8
  • QT传输函数控件设计1 引子
  • QT传输函数控件设计2 体渲染和VTK
  • QT传输函数控件设计3 QVTKWidget和QT图形界面的融合
  • QT传输函数控件设计4 接着进行融合
  • QT传输函数控件设计5 显示体渲染效果
  • QT传输函数控件设计6 设计Dock窗体结构
  • QT传输函数控件设计7 边界和布局规划
  • QT传输函数控件设计8 设计小圆点
  • 230. Kth Smallest Element in a BST
  • Android框架之Volley
  • codis proxy处理流程
  • JavaScript/HTML5图表开发工具JavaScript Charts v3.19.6发布【附下载】
  • Java反射-动态类加载和重新加载
  • mongo索引构建
  • npx命令介绍
  • 笨办法学C 练习34:动态数组
  • 开发了一款写作软件(OSX,Windows),附带Electron开发指南
  • 那些年我们用过的显示性能指标
  • 三分钟教你同步 Visual Studio Code 设置
  • 使用SAX解析XML
  • 因为阿里,他们成了“杭漂”
  • 在Mac OS X上安装 Ruby运行环境
  • 摩拜创始人胡玮炜也彻底离开了,共享单车行业还有未来吗? ...
  • 如何通过报表单元格右键控制报表跳转到不同链接地址 ...
  • ​ 无限可能性的探索:Amazon Lightsail轻量应用服务器引领数字化时代创新发展
  • ​2020 年大前端技术趋势解读
  • ​软考-高级-信息系统项目管理师教程 第四版【第19章-配置与变更管理-思维导图】​
  • ###STL(标准模板库)
  • (aiohttp-asyncio-FFmpeg-Docker-SRS)实现异步摄像头转码服务器
  • (C#)Windows Shell 外壳编程系列9 - QueryInfo 扩展提示
  • (Redis使用系列) Springboot 使用Redis+Session实现Session共享 ,简单的单点登录 五
  • (多级缓存)缓存同步
  • (剑指Offer)面试题34:丑数
  • (蓝桥杯每日一题)love
  • (十)DDRC架构组成、效率Efficiency及功能实现
  • (转)VC++中ondraw在什么时候调用的
  • (转)visual stdio 书签功能介绍
  • *(长期更新)软考网络工程师学习笔记——Section 22 无线局域网
  • *p=a是把a的值赋给p,p=a是把a的地址赋给p。
  • .NET 8 编写 LiteDB vs SQLite 数据库 CRUD 接口性能测试(准备篇)
  • .NET Compact Framework 多线程环境下的UI异步刷新
  • .Net mvc总结
  • .NET 解决重复提交问题
  • .Net 中的反射(动态创建类型实例) - Part.4(转自http://www.tracefact.net/CLR-and-Framework/Reflection-Part4.aspx)...
  • .net对接阿里云CSB服务
  • .NET高级面试指南专题十一【 设计模式介绍,为什么要用设计模式】
  • .net和php怎么连接,php和apache之间如何连接
  • .NET连接数据库方式