重写绘图事件处理器,用于绘制图形
QPainter
QPainter是Qt框架中的一个类,用于在QWidget或QPixmap等设备上进行绘图操作。它提供了一系列的绘图函数,可以绘制各种形状、文本、图像等。通过QPainter,我们可以实现自定义的绘图效果,例如绘制图表、绘制自定义控件等。
QPaintEvent
QPaintEvent是Qt中的一个事件类,用于处理窗口或控件需要重新绘制的情况。当窗口或控件需要重新绘制时,系统会发送一个QPaintEvent事件,程序可以在该事件的处理函数中实现自定义的绘制操作。QPaintEvent包含了需要重新绘制的区域的信息,程序可以根据这些信息进行相应的绘制操作。
//重写绘图事件处理器
void Widget::paintEvent(QPaintEvent *event)
{
// qDebug() << "paintEven";
QPainter painter(this);//画家
QPen pen(QColor(Qt::black));//画笔
QBrush brush(QColor(Qt::white));//画刷
painter.setPen(pen);//画家拿笔
painter.setBrush(brush);//画家拿刷子
//画2/3的矩形作为画板
painter.drawRect(0,0,width()*2/3,this->height());
//调整画笔的颜色和粗细
pen.setWidth(ui->spinBox->value());//设置画笔的粗细
pen.setStyle(Qt::SolidLine);
pen.setColor(QColor(Qt::red));
painter.setPen(pen);//画家拿笔
//调整画刷的颜色和粗细
brush.setColor(Qt::blue);
brush.setStyle(Qt::CrossPattern);
painter.setBrush(brush);//画家拿刷子
判断是画线还是画矩形-----combobox里面判断
//if (rect.contains(start) && rect.contains(end))
// { // 判断是否在矩形框内
if(ui->comboBox->currentText() == "Line")//画线
{
painter.drawLine(start,end);
}
else if(ui->comboBox->currentText() == "Rect")
{
painter.drawRect(QRect(start,end));
}
else if(ui->comboBox->currentText() == "Circle")
{
painter.drawEllipse(QRect(start,end));
}
//图形按照比例放大或缩小
painter.scale(ui->horizontalSlider->value()/33.0,ui->horizontalSlider->value()/33.0);
//图形移动
//从左上到右下
painter.translate(ui->horizontalSlider_translate->value(),ui->horizontalSlider_translate->value());
// //从左到右
// painter.translate(ui->horizontalSlider_translate->value(),0);
// //从右到左
// painter.translate(0,ui->horizontalSlider_translate->value());
//图形旋转
painter.rotate(ui->horizontalSlider_roll->value());//旋转
//图形扭曲
//扭曲系数0~1
painter.shear(ui->horizontalSlider_shear->value()/99.0,ui->horizontalSlider_shear->value()/99.0);
painter.drawRect(0,0,100,100);
}
void Widget::mousePressEvent(QMouseEvent *event)
{
//获取当前鼠标的位置
start = event->pos();
}
void Widget::mouseMoveEvent(QMouseEvent *event)
{
end = event->pos();
update();//强制产生绘图事件
}
}
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QPaintEvent>
#include <QDebug>
#include <QPainter>
#include <Qpen>
#include <QBrush>
#include <QMouseEvent>
#include <QColorDialog>
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
~Widget();
protected:
void paintEvent(QPaintEvent *event);
void mousePressEvent(QMouseEvent *event);
void mouseMoveEvent(QMouseEvent *event);
private slots:
//定义横向的spinbox用来控制图形
void on_horizontalSlider_sliderMoved(int position);
void on_horizontalSlider_translate_sliderMoved(int position);
void on_horizontalSlider_roll_sliderMoved(int position);
void on_horizontalSlider_shear_sliderMoved(int position);
private:
Ui::Widget *ui;
QPoint start,end;
};
#endif // WIDGET_H