一、 绘制文本并设置动态字体
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));
}
通常绘图设备分为三种:
- QPixmap:针对屏幕进行优化了,和平台相关,不能对图片进行修改
- QImage:和平台无关,可以对图片进行修改,在线程中绘图
- 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); //将加载的二进制文件绘画到当前窗口上
}
- 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);
}