前言:
本文操作均为在vs2015+QT5.9.5版本中执行
头文件:testpainter.h
#pragma once
#include <QtWidgets/QWidget>
#include "ui_testpainter.h"
class TestPainter : public QWidget
{
Q_OBJECT
public:
TestPainter(QWidget *parent = Q_NULLPTR);
void paintEvent(QPaintEvent *ev);
private:
Ui::TestPainterClass ui;
};
UI文件:testpainter.ui
/********************************************************************************
** Form generated from reading UI file 'testpainter.ui'
**
** Created by: Qt User Interface Compiler version 5.9.5
**
** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef UI_TESTPAINTER_H
#define UI_TESTPAINTER_H
#include <QtCore/QVariant>
#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QFontComboBox>
#include <QtWidgets/QHeaderView>
#include <QtWidgets/QWidget>
QT_BEGIN_NAMESPACE
class Ui_TestPainterClass
{
public:
QFontComboBox *fontComboBox;
void setupUi(QWidget *TestPainterClass)
{
if (TestPainterClass->objectName().isEmpty())
TestPainterClass->setObjectName(QStringLiteral("TestPainterClass"));
TestPainterClass->resize(1280, 700);
fontComboBox = new QFontComboBox(TestPainterClass);
fontComboBox->setObjectName(QStringLiteral("fontComboBox"));
fontComboBox->setGeometry(QRect(900, 50, 251, 61));
retranslateUi(TestPainterClass);
QMetaObject::connectSlotsByName(TestPainterClass);
} // setupUi
void retranslateUi(QWidget *TestPainterClass)
{
TestPainterClass->setWindowTitle(QApplication::translate("TestPainterClass", "TestPainter", Q_NULLPTR));
} // retranslateUi
};
namespace Ui {
class TestPainterClass: public Ui_TestPainterClass {};
} // namespace Ui
QT_END_NAMESPACE
#endif // UI_TESTPAINTER_H
主函数:main.cpp
#include "testpainter.h"
#include <QtWidgets/QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
TestPainter w;
w.show();
return a.exec();
}
实现文件:testpainter.cpp
#include "testpainter.h"
#include <QPainter>
#include <QVector>
TestPainter::TestPainter(QWidget *parent)
: QWidget(parent)
{
ui.setupUi(this);
//当选中字体后刷新界面,更新字体
connect(ui.fontComboBox, SIGNAL(currentFontChanged(QFont)), this, SLOT(update()));
}
void TestPainter::paintEvent(QPaintEvent *ev)
{
#if 1
//创建一个画板添加到widget中
QPainter p(this);
//第二种画板添加到widget方法
//p.begin(this);
//设置画笔颜色
//p.setPen(QColor(R, G, B, A));
p.setPen(QColor(255,0,0,150));
//设置字体
/*
一、代码设置字体方法
p.setFont(QFont(const QString &family, int pointSize = -1));
p.setFont(QFont(需要设置的字体(PS:类型为QString),字体大小设置));
*/
//p.setFont(QFont(QString::fromLocal8Bit("黑体"),30));
/*
二、控件设置字体方法(PS:需要绑定槽事件"update()")
第一步:用QFont存储当前选中的字体
第二部:设置字体大小
*/
QFont font = ui.fontComboBox->currentFont();
font.setPixelSize(30);//设置字体大小
p.setFont(font);//字体设置到画板中
//绘制文本
//p.drawText(x,y,text);
p.drawText(200,200,QString::fromLocal8Bit("文本绘制测试"));
#endif //绘制文本
#if 1
//创建一个画板添加到widget中
//QPainter p(this);
QPen pen;//设置画笔
/*一、绘制线的样式
enum PenStyle {
NoPen, //没有笔
SolidLine, //实线
DashLine, //虚线
DotLine, //点线
DashDotLine, //点划线
DashDotDotLine, //参考Qt助手文档;
CustomDashLine //可定制的虚线
*/
//设置为实线
pen.setStyle(Qt::SolidLine);
//设置线的粗细;
pen.setWidth(15);
/*二、设置画笔颜色
enum GlobalColor {//可以进行调用的部分颜色
color0,color1,black,white,darkGray,gray,lightGray,red,green,blue,cyan,magenta,
yellow,darkRed,darkGreen,darkBlue,darkCyan,darkMagenta,darkYellow,transparent
};
PS:可以采用QColor方法使用RGBA调色
*/
//设置画笔颜色
pen.setBrush(Qt::red);
//设置画笔为icon样式(PS:用于刮刮乐最好,图片设置为全局的)
pen.setBrush(QBrush(QImage("five.png")));
/*三、设置结尾处样式
enum PenCapStyle { //行结束描述风格(PS:样式查询Qt助手文档)
FlatCap = 0x00,
SquareCap = 0x10,
RoundCap = 0x20,
MPenCapStyle = 0x30
};
*/
//设置结尾处样式
pen.setCapStyle(Qt::RoundCap);
/*四、设置连接处样式
enum PenJoinStyle { // 线连接方式(PS:样式查询Qt助手文档)
MiterJoin = 0x00,
BevelJoin = 0x40,
RoundJoin = 0x80,
SvgMiterJoin = 0x100,
MPenJoinStyle = 0x1c0
};
*/
//设置连接处样式
pen.setJoinStyle(Qt::RoundJoin);
int x = ui.fontComboBox->width();
int y = ui.fontComboBox->height();
//设置画笔到画板中
p.setPen(pen);
//绘画一个直角三角形
p.drawLine(QLine(65, 60, 65, 120)); //第一步:竖线
p.drawLine(QLine(65, 120, 130, 120));//第二部:横线
p.drawLine(QLine(130, 120, 65, 60)); //第三步:斜线
//利用QVector绘制一个正方形
QVector<QLine> lines;
lines.push_back(QLine(150, 120, 150, 180));
lines.push_back(QLine(150, 180, 210, 180));
lines.push_back(QLine(210, 180, 210, 120));
lines.push_back(QLine(210, 120, 150, 120));
//添加数组到画笔进行绘画
p.drawLines(lines);
/*
绘画结束。绘制时使用的所有资源都会被释放。
通常不需要调用它,因为它是由析构函数调用的。
*/
p.end();//绘画结束
#endif //绘制线
}