【Qt】绘图应用 / 实验三 绘图编辑器

Qt 2D绘图

参考文档:Qt Creator快速入门_霍亚飞

QPainter:一般在paintEvent()(重绘事件的处理函数)中进行绘制

绘制图形:QPainter

  1. 创建QPainter对象(指定绘图设备,一般为this),使用构造函数创建的对象会自动调用begin()、end()
  2. 进行图形的绘制
  3. 最后销毁QPainter对象(没有指定绘制设备时,需要自己调用end())

 

QPen类

参考文章:QT Road之【QPen】

 

双缓冲绘图

双缓冲绘图,实在进行绘图时,先将所有内容都绘制到一个绘图设备上,然后再将整个图像绘制到部件上显示出来。

双缓冲绘图可以避免显示时的闪烁现象,也可以实现一些绘图效果

 


实验三 绘图编辑器

绘图编辑器下载:Qt绘图编辑器(涂鸦、画矩形、画椭圆形、画蝴蝶)

其实实现的步骤和上次文本编辑器的差不多,无非就是先设计ui界面,然后一个动作搞一个槽函数,然后吧啦吧啦进行设置就可以了

UI设计器

我设计的画板,然后可以做一些比较基础的操作,本来我想再做一些其他东西的,但是谁知道我在一个蠢问题里面纠结了一天!然后我就没有时间做,然后画矩形和椭圆形的也比较简单,没有用到双缓冲,然后鼠标点击再释放来画随意大小的图形 (没错双缓冲就是一个蠢问题之一,还有一个是画刷的。。。emmmm)

这次的Ui设计与文本编辑器不同之处在于,我还加了一个状态栏,可以依据鼠标放到什么动作上面,然后显示什么状态

还有多加了两个工具栏=w=,成品如下:

代码如下:

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#pragma execution_character_set("utf-8")

#include <QMainWindow>

#include <QLabel>
#include <QComboBox>
#include <QSpinBox>
#include <QColorDialog>
#include <QPainter>
#include <QMouseEvent>
#include <QGridLayout>
#include <QToolButton>
#include <QToolButton>

#include "mydraw.h"

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
private:
    Ui::MainWindow *ui;

public:
    void createDrawToolBar();//涂鸦工具栏
    void createPaintToolBar();//画图形工具栏

private:
    myDraw *draw;
    //画笔
    QLabel *styleLabel;
    QComboBox *styleComboBox;
    QLabel *widthLabel;
    QSpinBox *widthSpinBox;
    //画刷
    QLabel *brushColorLabel;
    QFrame *brushColorFrame;
    QLabel *brushStyleLabel,*spreadLabel;
    QComboBox *brushStyleComboBox,*spreadComboBox;
    QGradient::Spread spread;
    QToolButton *colorBtn;
    QColor brushclr;
    Qt::BrushStyle style;
    QToolButton *click;


public slots:
    void ShowStyle(); //画笔类型
    void on_PenColorAction_triggered();//画笔颜色
    void on_ClearAction_triggered();//清除
    void ShowBrush(int value); //画刷风格
    void brushcolor();
    void buttonclick();

private slots:
    void on_OpenAction_triggered();
    void on_SaveAction_triggered();
    void on_DrawAction_triggered();
    void on_RectAction_triggered();
    void on_EslAction_triggered();
    void on_BufAction_triggered();
    void on_NewAction_triggered();
};

#endif // MAINWINDOW_H
  • 4
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值