zoukankan      html  css  js  c++  java
  • Qt学习(四)—实例涂鸦画板mspaint

    一、Qt图形绘制 
    自己在Qt开源社区在自学yafeilinux前辈的《Qt快速入门系列教程》中的图形篇,结合所学的知识,可以做一个涂鸦板实例

    二、实现涂鸦板 
    1、新建工程mspaint, 基类选择QDialog 
    这里写图片描述 
    2、在dialog.h里面添加如下代码

    引入头文件
    
    #include <QDialog>
    #include <QPainter>
    #include <QPaintEvent>
    #include <QMouseEvent>
    #include <QPixmap>
    #include <QPoint>
    #include <QPointF>
    
    函数声明
     protected:
        void paintEvent(QPaintEvent *);
        void mouseReleaseEvent(QMouseEvent *);
        void mousePressEvent(QMouseEvent *);
        void mouseMoveEvent(QMouseEvent *);
    
    私有变量
    private:
    Ui::Dialog *ui;
    QPixmap pix;
    QPoint lastPoint;
    QPoint endPoint;
    

    3、在dialog.cpp添加修改如下代码

    构造函数
    
        Dialog::Dialog(QWidget *parent) :
        QDialog(parent),
        ui(new Ui::Dialog)
    {
        ui->setupUi(this);
    
        resize(600,500);
        pix=QPixmap(200,200);
        pix.fill(Qt::white);
    }
    
    函数定义
    
        //根据鼠标前后两个指针就能绘制直线
        void Dialog::paintEvent(QPaintEvent *){
        QPainter pp(&pix);
        pp.drawLine(lastPoint,endPoint);
        lastPoint=endPoint;
        QPainter painter(this);
        painter.drawPixmap(0,0,pix);
        }
    
    
        //鼠标按下获得开始点
        void Dialog::mousePressEvent(QMouseEvent *event){
            if(event->button()==Qt::LeftButton){//鼠标左键按下
                lastPoint=event->pos();
            }
        }
    
        //当鼠标移动时获得结束点,并更新绘制。
        //调用update()函数会执行paintEvent()函数进行重新绘制。
        void Dialog::mouseMoveEvent(QMouseEvent *event){
            if(event->buttons()&Qt::LeftButton)
            {
                endPoint=event->pos();
                update();//进行绘制
            }
        }
    
    
        //当鼠标释放时,也进行重新绘制
        void Dialog::mouseReleaseEvent(QMouseEvent *event){
            if(event->button()==Qt::LeftButton)
            {
                endPoint=event->pos();
                update();
            }
        }
    

    三、运行结果图

    这里写图片描述

    http://blog.csdn.net/yanqianglifei/article/details/51781358

  • 相关阅读:
    无题
    赌对了
    赌:
    这次是真的再见了,oi退役回忆录
    线段树(lazy标记)
    《挑战》2.1 POJ POJ 1979 Red and Black (简单的DFS)
    《挑战》2.1 POJ 2386 Lake Counting (简单的dfs)
    TC安装全系列教程
    ProblemC 剪花布条(KMP基础)
    多校+CF简单题
  • 原文地址:https://www.cnblogs.com/findumars/p/5682639.html
Copyright © 2011-2022 走看看