13.1、QT::TestPainter操作

前言:

本文操作均为在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 //绘制线

}

ui界面布局样式:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柳一航

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值