• 大小: 4.35MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-09-16
  • 语言: 其他
  • 标签: QT  QPainter  

资源简介

自己用QT模仿了window下的画图软件,编写了一个,大部分功能都实现了

资源截图

代码片段和文件信息

#include “circle.h“
#include “paintarea.h“



int CCircle::m_circleCount = 0;


CCircle::CCircle()
{
    m_circleCount++;
    m_circleIndex = m_circleCount;
    m_shapeType = PaintArea::MENU_STATUS_CIRCLE_2;
}


void CCircle::drawInfo(QPainter &pt)
{

}



// 保存接口
void CCircle::save(QSettings &fd)
{
    // 1.图元的类型
    // 2.所有点的位置
    // 3.总共几个点
    // 4.组名 S-shapeIndex

    // 组名
    QString group = QString(“C-%1“).arg(m_circleIndex);

    // 1.图元的类型
    fd.setValue(QString(“%1/type“).arg(group)m_shapeType);
    // 2.总共几个点
    fd.setValue(QString(“%1/ptCount“).arg(group)m_ptArray.size());\
    // 3.具体的点
    int i;
    for(i = 0; i< m_ptArray.size();i++)
    {
        fd.setValue(QString(“%1/pt%2“).arg(group).arg(i)
                    m_ptArray[i]);
    }
}



void CCircle::load(QSettings &fd)
{

}



void CCircle::drawShape(QPainter &pt)
{
    // 求出半径
    m_radius = qSqrt(
                   (m_ptArray[1].y() - m_ptArray[0].y())*(m_ptArray[1].y() - m_ptArray[0].y())
                   +
                   (m_ptArray[1].x() - m_ptArray[0].x())*(m_ptArray[1].x() - m_ptArray[0].x())
               );
    pt.drawEllipse(m_ptArray[0]m_radiusm_radius);
}

// 捕捉鼠标左键按下去
void CCircle::mousePressEvent(QMouseEvent *event)
{
    if(m_clickNum == 0)
    {
        // 设置第一个点
        m_ptArray.push_back(event->pos());
        // 假设这个时候第二点和第一个点重合
        m_ptArray.push_back(event->pos());

        // 改变当前的绘图状态为正在绘图当中
        PaintArea::m_curDrawStatus = PaintArea::DRAW_STATUS_DRAWING;
        m_clickNum++;
    }
    else
    {
        if(m_clickNum == 1)
        {
            // 设置第2个点
            m_ptArray[1] = event->pos();
            // 改变当前的绘图状态为准备绘图
            PaintArea::m_curDrawStatus = PaintArea::DRAW_STATUS_PREPARE;
            m_clickNum++;
        }
        else
        {
            if(m_clickNum == 2)
            {
                if(m_hitCtrlIndex == -1)
                {
                    // 改变当前的绘图状态为拖动或者移动
                    PaintArea::m_curDrawStatus = PaintArea::DRAW_STATUS_DRAG;
                    // 记录拖动的原始点
                    m_lastDragPoint = event->pos();
                }
                else
                {
                    // 改变当前的绘图状态为改变图元状态
                    PaintArea::m_curDrawStatus = PaintArea::DRAW_STATUS_CHANGE;
                }
            }
        }
    }
}

// 鼠标移动事件
void CCircle::mouseMoveEvent(QMouseEvent *event)
{
    switch(PaintArea::m_curDrawStatus)
    {
        case PaintArea::DRAW_STATUS_PREPARE:
            break;
        case PaintArea::DRAW_STATUS_DRAWING:
            m_ptArray[1] = event->pos();
            break;
        case PaintArea::DRAW_STATUS_DRAG:
        {
            QPoint spanPt = event->pos() - m_lastDragPoint;
            m_ptArray[0] += spanPt;
            m_ptArray[1] += spanPt;
            // 记录最新的拖动点
            m_lastDragPoint = event->pos();
    

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2016-09-19 18:05  draw\
     目录           0  2016-09-18 23:38  draw\build-draw-未命名-Debug\
     文件        5958  2016-09-18 23:18  draw\build-draw-未命名-Debug\Makefile
     文件        7726  2016-09-18 23:18  draw\build-draw-未命名-Debug\Makefile.Debug
     文件        7885  2016-09-18 23:18  draw\build-draw-未命名-Debug\Makefile.Release
     目录           0  2016-09-18 23:38  draw\build-draw-未命名-Debug\debug\
     文件      448476  2016-09-18 23:38  draw\build-draw-未命名-Debug\debug\circle.o
     文件     4133597  2016-09-18 23:38  draw\build-draw-未命名-Debug\debug\draw.exe
     文件      462775  2016-09-18 23:38  draw\build-draw-未命名-Debug\debug\line.o
     文件      276975  2016-09-18 23:38  draw\build-draw-未命名-Debug\debug\main.o
     文件      496340  2016-09-18 23:38  draw\build-draw-未命名-Debug\debug\mainpaint.o
     文件        4293  2016-09-18 23:38  draw\build-draw-未命名-Debug\debug\moc_mainpaint.cpp
     文件      295935  2016-09-18 23:38  draw\build-draw-未命名-Debug\debug\moc_mainpaint.o
     文件        2526  2016-09-18 23:38  draw\build-draw-未命名-Debug\debug\moc_paintarea.cpp
     文件      296687  2016-09-18 23:38  draw\build-draw-未命名-Debug\debug\moc_paintarea.o
     文件      473763  2016-09-18 23:38  draw\build-draw-未命名-Debug\debug\paintarea.o
     文件     3016204  2016-09-18 23:38  draw\build-draw-未命名-Debug\debug\qrc_res.cpp
     文件      590951  2016-09-18 23:38  draw\build-draw-未命名-Debug\debug\qrc_res.o
     文件      460308  2016-09-18 23:38  draw\build-draw-未命名-Debug\debug\rectangle.o
     文件      411468  2016-09-18 23:38  draw\build-draw-未命名-Debug\debug\shape.o
     文件         211  2016-09-18 23:18  draw\build-draw-未命名-Debug\object_script.draw.Debug
     文件         231  2016-09-18 23:18  draw\build-draw-未命名-Debug\object_script.draw.Release
     目录           0  2016-09-19 18:09  draw\build-draw-未命名-Debug\release\
     文件       13734  2016-09-18 23:38  draw\build-draw-未命名-Debug\ui_mainwin.h
     文件        3057  2016-09-18 23:38  draw\build-draw-未命名-Debug\ui_paint.h
     文件        4860  2016-09-02 09:21  draw\circle.cpp
     文件         852  2016-09-02 08:54  draw\circle.h
     文件         372  2016-09-18 23:18  draw\draw.pro
     文件       13096  2016-09-19 18:05  draw\draw.pro.user
     目录           0  2016-08-30 17:35  draw\image\
     文件        1012  2016-08-07 21:53  draw\image\arc.png
............此处省略42个文件信息

评论

共有 条评论