Qt 2D绘图
参考文档:Qt Creator快速入门_霍亚飞
QPainter:一般在paintEvent()(重绘事件的处理函数)中进行绘制
绘制图形:QPainter
- 创建QPainter对象(指定绘图设备,一般为this),使用构造函数创建的对象会自动调用begin()、end()
- 进行图形的绘制
- 最后销毁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