Qt 图像绘制QPainter

一、 绘制文本并设置动态字体

QtWidgetsApplication1::QtWidgetsApplication1(QWidget *parent)
    : QWidget(parent)
{
    ui.setupUi(this);

	connect(ui.fontComboBox, &QFontComboBox::currentFontChanged, [=]() {
		this->update();
	});
}

void QtWidgetsApplication1::paintEvent(QPaintEvent *event)
{
	//设置绘图设备(当前窗口)
	QPainter p(this);
	//设置画笔颜色
	p.setPen(QColor(255, 0, 0, 150));

	QFont font = ui.fontComboBox->currentFont();
	font.setPixelSize(30);
	p.setFont(font);

	p.drawText(100, 150, QStringLiteral("测试显示的文字"));
}

二、QPainter划线

void QtWidgetsApplication1::paintEvent(QPaintEvent *event)
{
	//画家绑定绘图设备(当前窗口)
	QPainter p(this);
	
	//设置画笔样式
	QPen pen;
	pen.setStyle(Qt::SolidLine);	//实线
	pen.setWidth(30);	//线宽
	pen.setBrush(QBrush(QImage("xiong.jpeg")));
	//pen.setBrush(Qt::red);	//画刷
	pen.setCapStyle(Qt::RoundCap);	//结尾端样式
	pen.setJoinStyle(Qt::RoundJoin);	//连接处样式

	p.setPen(pen);
	//一次绘制一条线,也可以一次性绘制多条
	p.drawLine(QLine(0, 0, 300, 300));
	p.drawLine(QLine(300, 300, 600, 0));
}

通常绘图设备分为三种:

  1. QPixmap:针对屏幕进行优化了,和平台相关,不能对图片进行修改
  2. QImage:和平台无关,可以对图片进行修改,在线程中绘图
  3. QPicture:保存绘图的状态(二进制文件)

在三种绘图设备中,QPixmap应用居多

一、QPixmp 代码实现

QtPixmap::QtPixmap(QWidget *parent)
   : QWidget(parent)
{
   ui.setupUi(this);

   QPixmap pixmap(400, 300);	//指定绘图设备大小
   QPainter p(&pixmap);

   //填充背景色为白色
   //p.fillRect(0, 0, 400, 300, QBrush(Qt::white));		//通过画家填充
   pixmap.fill(Qt::white);		//通过绘图设备填充
   
   p.drawPixmap(0, 0, 80, 80, QPixmap("../Image/ggirl.jpg"));
   //保存图片(在文件中查看),jpg,png格式都可以
   pixmap.save("../Image/pixmap.jpg");
}

二、QImage 代码实现

QtImage::QtImage(QWidget *parent)
	: QWidget(parent)
{
	ui.setupUi(this);

	//创建一个绘图设备 QImage::Format::Format_ARGB32格式背景是透明
	QImage image(400, 300, QImage::Format::Format_ARGB32);

	QPainter p;
	p.begin(&image);		//创建画家,指定绘图设备
	p.drawImage(0, 0, QImage("../Image/move.jpg"));
	//可设置像素点
	image.setPixel(300, 100, qRgb(0, 255, 0));
	image.pixel(300,100);	//获取某个点的像素点
	p.end();

	//保存图片
	image.save("../Image/image.png");		
}

三、QPicture 代码实现

QtPicture::QtPicture(QWidget *parent)
	: QWidget(parent)
{
	ui.setupUi(this);

	QPicture picture;
	QPainter p; 
	p.begin(&picture);

	p.drawPixmap(0, 0,80,80, QPixmap("../Image/move.jpg"));
	//画一条直线
	p.drawLine(50, 50, 150, 50);

	p.end();
	//保存的是二进制文件
	picture.save("../Image/picture.png");

}
void QtPicture::paintEvent(QPaintEvent *event)
{
	QPicture pic;
	//加载保存的二进制文件
	pic.load("../Image/picture.png");

	QPainter p(this);
	p.drawPicture(0,0,pic);		//将加载的二进制文件绘画到当前窗口上
}
  1. QPixmap 和 QImage 之间相互转换
void QtPixmap ::paintEvent(QPaintEvent *event)
{
#if 0
	QPicture pic;
	//加载保存的二进制文件
	pic.load("../Image/picture.png");

	QPainter p(this);
	p.drawPicture(0,0,pic);		//将加载的二进制文件绘画到当前窗口上
#endif

	QPainter p;
	QPixmap pixmap;
	pixmap.load("../Image/girl.png");
	//QPixmap 转换成 QImage
	QImage tempImage = pixmap.toImage();
	p.drawImage(0, 0, tempImage);

	QImage image;
	image.load("../Image/girl.png");
	//QImage 转换成 QPixmap
	QPixmap tempPixmap = QPixmap::fromImage(image);
	p.drawPixmap(100, 0, tempPixmap);

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值