精华内容
下载资源
问答
  • Qt画圆角矩形
    千次阅读
    2018-08-02 16:22:42

    Qt画圆角矩形

    void TestPainter::paintEvent(QPaintEvent *event)
    {
    	QPainter painter(this);
    
    	const qreal radius = 20;
    	QRectF rect = QRect(200, 200, 400, 80);
    
    	QPainterPath path;
    
    	path.moveTo(rect.bottomRight() - QPointF(0, radius));
    	path.lineTo(rect.topRight() + QPointF(0, radius));
    	path.arcTo(QRectF(QPointF(rect.topRight() - QPointF(radius * 2, 0)), QSize(radius * 2, radius *2)), 0, 90);
    	path.lineTo(rect.topLeft() + QPointF(radius, 0));
    	path.arcTo(QRectF(QPointF(rect.topLeft()), QSize(radius * 2, radius * 2)), 90, 90);
    	path.lineTo(rect.bottomLeft() - QPointF(0, radius));
    	path.arcTo(QRectF(QPointF(rect.bottomLeft() - QPointF(0, radius * 2)), QSize(radius * 2, radius * 2)), 180, 90);
    	path.lineTo(rect.bottomLeft() + QPointF(radius, 0));
    	path.arcTo(QRectF(QPointF(rect.bottomRight() - QPointF(radius * 2, radius * 2)), QSize(radius * 2, radius * 2)), 270, 90);
    
    	painter.fillPath(path, QColor(Qt::gray));
    	//painter.drawPath(path);
    
    	QWidget::paintEvent(event);
    }
    
    更多相关内容
  • 代码实现使用qt画矩形框的功能,代码小巧玲珑,亲测可用
  • qt 旋转矩形

    2018-05-01 14:13:36
    qt 画矩形框、旋转矩形、先画直线、再画矩形、用于抠图
  • QT 图形视图(Graphics View)提供了一个平台, 框架包括一个事件传播架构,支持场景(Scene)中的图元(Item),通过画矩形框,系统了解 显示 场景 图元 paint 重载等
  • 这是QT软件: 窗口里使用鼠标绘制矩形源码。 一般在软件开发中,需要都有选择区域的需求,比如: 1. 截图软件,需要鼠标选择指定区域截图 2. 屏幕录像软件,需要鼠标选择指定区域录像 3. 图片浏览器,需要鼠标...
  • QT 矩形框绘制 源代码

    2017-03-30 20:12:31
    基于QT平台,鼠标绘制矩形框,并能随意拖动,键盘控制。全套代码,可以参考使用。基于QT平台,鼠标绘制矩形框,并能随意拖动,键盘控制。全套代码,可以参考使用
  • qt画板可画矩形

    2013-12-23 14:04:43
    画矩形直线(还有其他的图形) 包含信号槽 有3个类
  • QT画矩形

    2015-11-22 23:52:00
    第一次发QT的博文,本人对QT接触没多久,还在入门水平,大牛勿喷哈,之前因为C# (.net framework)做出来的绘制矩形的程序闪的太厉害了,现在用QT重做一个 先上效果图 代码贴全了 #include ...

    第一次发QT的博文,本人对QT接触没多久,还在入门水平,大牛勿喷哈,之前因为C#  (.net framework)做出来的绘制矩形的程序闪的太厉害了,现在用QT重做一个

     

    先上效果图

     

     


     

     

    代码贴全了

    #include "mainwindow.h"
    #include "ui_mainwindow.h"
    #include<QPalette>
    #include<Qstring>
    MainWindow::MainWindow(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
        //设置背景色为白色
        QPalette palette(this->palette());
        palette.setColor(QPalette::Background, Qt::white);
        this->setPalette(palette);
        //初始化变量
        this->mousedown=false;
        this->release=false;
        this->h=900;
        this->w=1440;
        //初始化画布
        pix=new QPixmap(w,h);
        pix->fill(Qt::white);
    }
    
    MainWindow::~MainWindow()
    {
        delete ui;
    }
    
    void MainWindow::paintEvent(QPaintEvent *event)
    {
    
        QPainter paintpix(pix);
        QPainter paintform(this);
        if(this->mousedown)//鼠标移动时触发
        {
            paintform.drawPixmap(0,0,w,h,*pix);
            QRect* rect=new QRect(this->startpoint,this->endpoint);
            paintform.drawRect (*rect);
    
        }
        else if(!this->mousedown&&this->release)//鼠标释放时触发
        {
            if(this->startpoint.x()==this->endpoint.x()&&this->endpoint.y()==this->startpoint.y())//两点重合时什么也不画
            {
                 paintform.drawPixmap(0,0,w,h,*pix);
                return;
            }
    
            QRect* rect=new QRect(this->startpoint,this->endpoint);
            paintpix.drawRect (*rect);
             paintform.drawPixmap(0,0,w,h,*pix);
            this->release=false;
        }
        else
        {
            paintform.drawPixmap(0,0,w,h,*pix);
        }
    
    }
    
    
    
    void MainWindow::mouseMoveEvent(QMouseEvent *event)
    {
        if(this->mousedown)
        {
            this->endpoint=event->pos();
            update();
        }
    
    }
    
    
    void MainWindow::mousePressEvent(QMouseEvent *event)
    {
        startpoint=event->pos();
        this->mousedown=true;
    
    
    }
    
    
    void MainWindow::mouseReleaseEvent(QMouseEvent *event)
    {
        this->endpoint=event->pos();
        this->mousedown=false;
        this->release=true;
        update();
    }
    
    
    
    void MainWindow::repaint()//重画时
    {
        QPainter paintform(this);
        paintform.drawPixmap(0,0,w,h,*pix);
    }

     

     

     

     

    示例代码链接::http://pan.baidu.com/s/1eQ2TaJw

     

     

    这个是C#版本的 http://www.cnblogs.com/magicianlyx/p/4979644.html

    转载于:https://www.cnblogs.com/magicianlyx/p/4987169.html

    展开全文
  • Qt实现点击添加图片,并可以在图片上线、矩形、圆
  • QT计算矩形面积

    2013-10-23 19:08:12
    C++计算矩形面积.。
  • Qt绘图编辑器(涂鸦、画矩形、画椭圆形、画蝴蝶),修改颜色、打开图片、保存图片、画刷风格、画刷颜色、画笔风格、画笔颜色、画笔线宽等等
  • QT 绘制矩形,圆,椭圆,抠图,截图,QLabel显示,QPainter绘图,绝对好用,很有参考价值
  • CustomSense继承QGraphicsScene,QGraphicsView,重写了鼠标事件,在CustomSense上添加图片并画矩形标记出特定区域,是专门满足这个需求写的小测试例子,使用Qt5实现。
  • Qt QGraphics 实现可移动缩放的矩形框,源码及发布版本。博客https://blog.csdn.net/ShareProgress/article/details/101287935
  • 实在受不了了,网上搜的那些都只有框选,并没有把框选的区域显示,只能自己干了,希望能够帮到你们
  • Qt画矩形与椭圆的问题

    千次阅读 2017-09-13 10:04:43
    Qt的QPainter类中提供了drawEllipse和drawRect函数分别椭圆与矩形,但是这两个函数有一个共同的问题:所椭圆的长短轴与x、y轴平行,矩形的长短边也与x、y轴平行,如果想出现与x、y轴相交的效果(斜的),...
    Qt的QPainter类中提供了drawEllipse和drawRect函数分别画椭圆与矩形,但是这两个函数有一个共同的问题:所画椭圆的长短轴与x、y轴平行,矩形的长短边也与x、y轴平行,如果想出现与x、y轴相交的效果(斜的),QPainter提供了Rotate()和translate()函数分别对坐标系进行旋转和平移,但是对坐标系变换之后,再次画图便会以新的坐标系为标准进行绘制,如出现椭圆是斜的效果。
    我的功能需求是:在二维图形上画椭圆,旋转图像时,椭圆随之在二维图像上正确旋转。
    解决方案:1、记下椭圆左上角与右下角的坐标。
            2、使用 QPainterPath的addEllipse()函数生成椭圆,使用toFillPolygon()转换成
              polygon。并保存此polygon的点。
             切记要在初始的时候保存点,因为旋转之后,左上、右下点组成的矩形是平行坐标轴的,所以矩形不是
             想要的,故生成的椭圆也是不正确的,所以要在初始时记下椭圆上的点,旋转时不断更新这些点的
              display坐标。
            3、图像变换时(旋转、缩放等)利用每个点的世界坐标不变原则更新Polygon里的每个点,得到
            display坐标,用drawPolygon()即可得到想要的椭圆。
    
        QPainterPath ellipsePath;
        QRectF rectPath(LeftUpDisplayPoint, stRightBottomDisplayPoint);
        ellipsePath.addEllipse(rectPath);
        QPolygonF polygon = ellipsePath.toFillPolygon();//Converts the path into a polygon
    
        m_vecPolygonPath.clear();
        for(int nPolygonPointIndex = 0; nPolygonPointIndex < polygon.count(); nPolygonPointIndex++)
        {
            double dPointX = polygon.at(nPolygonPointIndex).x();
            double dPointY = polygon.at(nPolygonPointIndex).y();
            ControlPoint CurControl;
            CurControl.SetDisplayPosition(QPoint((int)dPointX, (int)dPointY));
            DisplayToWorld(CurControl);
            m_vecPolygonPath.push_back(CurControl);//存储起来
        }

    下面是QPainterPath类的简介,摘抄于http://blog.csdn.net/liang19890820/article/details/51393152#椭圆,对作者表示感谢

    QPainterPath 类(绘图路径)提供了一个容器,用于绘图操作,可以创建和重用图形形状。
    
    绘图路径是由许多图形化的构建块组成的对象,例如:矩形、椭圆、直线和曲线。构建块可以加入在封闭的子路径中,例如:矩形或椭圆。封闭的路径的起点和终点是一致的,或者他们可以作为未封闭的子路径独立存在,如:直线和曲线。
    
    QPainterPath 可以被填充、描绘轮廓、裁剪。要为一个指定的绘图路径生成可填充的轮廓,可以使用 QPainterPathStroker 类。与正常绘图相比,QPainterPath 的主要优点在于:复杂的图形只需创建一次,然后只需调用 QPainter::drawPath() 函数即可绘制多次。
    
    QPainterPath 提供了一组函数,可用于获取绘图路径及其元素的信息。除了可以使用 toReversed() 函数来改变元素的顺序外,还有几个函数将 QPainterPath 对象转换成一个多边形表示。
    

    创建 QPainterPath

    QPainterPath 对象可以用指定的起点,或者另一个 QPainterPath 对象的副本来构造一个空路径。
    
    一旦创建,可以使用 lineTo()、arcTo()、cubicTo() 和 quadTo() 函数将直线和曲线添加到路径中,直线和曲线从 currentPosition() 处伸展到其传递的参数的所在点的位置。
    
    QPainterPath 对象的 currentPosition() 始终是最后一个添加的子路径的最终位置(或初始起点),使用 moveTo() 函数可以在不增加组件的情况下移动 currentPositon(),moveTo() 函数会隐式地启动一个新的子路径,并关闭前一个。启动新的子路径的另一种方式是调用 closeSubpath() 函数,该函数通过添加一条直线(从 currentPosition() 到起始位置)来关闭当前路径。注意:新路径将 (0, 0) 作为其初始 currentPosition()。
    
    QPainterPath 也提供了一些便利的函数来添加一个封闭的子路径 - addEllipse()、addPath()、 addRect()、addRegion() 和 addText()。addPolygon() 函数添加一个未封闭的子路径。事实上,这些函数都是 moveTo()、lineTo()、cubicTo() 操作的集合。
    
    此外,使用 connectPath() 函数将路径添加至当前路径。但需要注意,该函数将通过添加一条直线,将当前路径的最后一个元素连接到给定的第一个元素。
    

    QPainterPath 信息

    QPainterPath 类提供了一组函数,用于返回有关该路径及其元素的信息。
    
    currentPosition() 函数返回被添加的最后一个子路径的终点(或初始起始点)。elementAt() 函数可用于检索各种子路径元素,可以使用 elementCount() 函数检索元素的数量,isEmpty() 函数可以告诉该 QPainterPath 对象是否包含任何元素。
    
    controlPointRect() 函数返回包含此路径中所有点和控制点的矩形。与使用浮点精度返回此画家路径的边界矩形的精确的 boundingRect() 相比,此函数的计算速度要快得多。
    
    最后,QPainterPath 提供了 contains() 函数,用于确定给定点或矩形是否在路径内。以及 intersects() 函数,用于确定给定矩形内的任何点是否也在该路径内。
    

    QPainterPath 转换

    出于兼容性原因,可能需要简化绘图路径的表示形式:QPainterPath 提供的 toFillPolygon()、toFillPolygons()和 toSubpathPolygons() 函数,用于将绘图路径转换为多边形。toFillPolygon() 将绘图路径作为单个多边形返回,而后两个函数返回一个多边形列表。
    
    提供了 toFillPolygons() 和 toSubpathPolygons() 函数,因为绘制几个小多边形通常比绘制一个大的多边形更快,即使绘制的总点数相同。两者之间的差异是它们返回的多边形数:toSubpathPolygons() 为每个子路径创建一个多边形,而不管相交的子路径(即重叠的边界矩形),而 toFillPolygons() 函数仅为重叠的子路径创建一个多边形。
    
    toFillPolygon() 和 toFillPolygons() 函数首先将所有子路径转换为多边形,然后使用重卷技术确保可以使用正确的填充规则来填充重叠的子路径。注意:重卷会在多边形中插入额外的线,因此填充多边形的轮廓与路径的轮廓不匹配。
    

    椭圆
    void QPainterPath::addEllipse(const QRectF & boundingRectangle)
    在指定的 boundingRectangle 内创建一个椭圆,并将其作为一个封闭的子路径添加至绘图路径中。
    椭圆由顺时针曲线组成,起始点和结束点在 0°(3 点钟的位置)。
    这里写图片描述

    QLinearGradient myGradient;
    QPen myPen;
    QRectF boundingRectangle;
    
    QPainterPath myPath;
    myPath.addEllipse(boundingRectangle);
    
    QPainter painter(this);
    painter.setBrush(myGradient);
    painter.setPen(myPen);
    painter.drawPath(myPath);
    

    多边形
    void QPainterPath::addPolygon(const QPolygonF & polygon)
    将指定的 polygon 作为子路径(未封闭)添加至绘图路径中。

    注意:添加了 polygon 后,当前位置是 polygon 的最后一个点。要画一条线回到起始点,使用 closeSubpath() 函数。
    这里写图片描述

    QLinearGradient myGradient;
    QPen myPen;
    QPolygonF myPolygon;
    
    QPainterPath myPath;
    myPath.addPolygon(myPolygon);
    
    QPainter painter(this);
    painter.setBrush(myGradient);
    painter.setPen(myPen);
    painter.drawPath(myPath);

    矩形

    void QPainterPath::addRect(const QRectF & rectangle)
    将指定的 rectangle 作为子路径(封闭)添加至绘图路径中。
    rectangle 作为顺时针的一组线被添加。添加 rectangle 后,绘图路径的当前位置是 rectangle 的左上角。
    这里写图片描述

    QLinearGradient myGradient;
    QPen myPen;
    QRectF myRectangle;
    
    QPainterPath myPath;
    myPath.addRect(myRectangle);
    
    QPainter painter(this);
    painter.setBrush(myGradient);
    painter.setPen(myPen);
    painter.drawPath(myPath);

    文本

    void QPainterPath::addText(const QPointF & point, const QFont & font, const QString & text)
    将指定的 text 添加至此路径中,作为由 font 创建的一组封闭子路径。定位子路径,使 text 基线的左端位于指定的 point。
    这里写图片描述

    QLinearGradient myGradient;
    QPen myPen;
    QFont myFont;
    QPointF baseline(x, y);
    
    QPainterPath myPath;
    myPath.addText(baseline, myFont, tr("Qt"));
    
    QPainter painter(this);
    painter.setBrush(myGradient);
    painter.setPen(myPen);
    painter.drawPath(myPath);

    弧形

    void QPainterPath::arcTo(const QRectF & rectangle, qreal startAngle, qreal sweepLength)
    创建一个弧形,占据了指定的 rectangle,以指定 startAngle 开始并逆时针扩展 sweepLength 度。

    角度都以度为单位,可以用负角度来指定顺时针弧形。

    注意:如果它们尚未连接,此函数将连接弧的起点到当前位置。弧形被加入后,当前位置是弧的最后一点。要画一条线回到起始点,使用 closeSubpath() 函数。
    这里写图片描述

    QLinearGradient myGradient;
    QPen myPen;
    
    QPointF center, startPoint;
    
    QPainterPath myPath;
    myPath.moveTo(center);
    myPath.arcTo(boundingRect, startAngle,
                 sweepLength);
    
    QPainter painter(this);
    painter.setBrush(myGradient);
    painter.setPen(myPen);
    painter.drawPath(myPath);

    贝塞尔曲线

    void QPainterPath::cubicTo(const QPointF & c1, const QPointF & c2, const QPointF & endPoint)
    使用指定的控制点 c1、c2,在当前位置和指定的 endPoint 之间添加一条贝塞尔曲线。
    曲线被添加后,当前位置会被更新为曲线的终点。
    这里写图片描述

    QLinearGradient myGradient;
    QPen myPen;
    
    QPainterPath myPath;
    myPath.cubicTo(c1, c2, endPoint);
    
    QPainter painter(this);
    painter.setBrush(myGradient);
    painter.setPen(myPen);
    painter.drawPath(myPath);

    填充规则
    Qt 提供了两种填充路径的规则:
    Qt::OddEvenFill (默认)
    这里写图片描述
    Qt::WindingFill
    这里写图片描述

    展开全文
  • 使用QtC++实现图像的显示放大缩小移动,显示矩形ROI放大缩小移动
  • Qt进行矩形绘图填充颜色

    千次阅读 2020-05-06 20:00:50
    需要使用到的类 QPen,QBrush,QGraphicsRectItem等 实现的效果如下: 具体代码如下: QGraphicsRectItem *rect0 = new QGraphicsRectItem(); QGraphicsRectItem *rect2 = new QGraphicsRectItem(); ...
    • 需要使用到的类
      QPen,QBrush,QGraphicsRectItem等
    • 实现的效果如下:
      在这里插入图片描述
      具体代码如下:
        QGraphicsRectItem *rect0 = new QGraphicsRectItem();
        QGraphicsRectItem *rect2 = new QGraphicsRectItem();
        QGraphicsLineItem *line0 = 
    展开全文
  • Qt矩形绘制

    千次阅读 2020-04-28 10:36:07
    Qt矩形绘制 开发工具与关键技术:QtCreator、C++ 作者:何任贤 撰写时间:2019年04月25日 我这个矩形绘制是类绘图软件的矩形绘制,我写了一个简单的例子,达到绘图软件的绘制矩形的效果。 首先要做的是重写四个...
  • Qt 使用paintEvent在 图像上 画矩形

    千次阅读 2020-08-13 11:44:51
    加载一个图片,在图片上选择相应的点,进行画矩形框,类似画roi区域。 QLabel控件大小为400 *300 而 图像大小为680 *480, 整体思路:图像大小自适应控件大小,当按下图像上某点时,先判断该点是否在控件范围内,...
  • 那要画矩形框,你不能在屏幕上直接画吧?!可以吗?可以的话留言告知我一下,谢谢。 那么很明显,我们需要一个画布,什么控件可以当做画布呢?widget,image这类的,或者找找Qpainter类看看怎么画。 好了,废话不多...
  • qt 绘制画板,矩形 圆等
  • //创建刷 QBrush brush; brush.setColor(QColor("#00B0AE")); brush.setStyle(Qt::Dense6Pattern); p.setBrush(brush); QRect tempRt(m_startPT, m_endPT); p.drawRect(tempRt); } } void Widget::...
  • QT 在QLabel上画矩形

    2019-11-04 09:07:17
    头文件: 参考:https://blog.csdn.net/naibozhuan3744/article/details/79166653
  • qt中在QLabel上显示图像并画矩形框。

    万次阅读 热门讨论 2018-06-11 23:20:55
    // 画矩形框 QPainter paint; paint.begin(this); paint.setPen(QPen(Qt::red, 1, Qt::SolidLine, Qt::RoundCap)); paint.drawRect(QRect(50, 50, 200, 200)); QString strText = QString::fromLocal8Bit(...
  • qt画矩形和圆3

    2019-11-25 07:23:39
    //画矩形 p . drawRect ( 200 , 200 , 200 , 50 ) ; //x 200 y 200 宽200 向下高50 //画圆 p . drawEllipse ( QPoint ( 200 , 200 ) , 30 , 10 ) ; p . end ( ) ; }
  • 本文章主要总结用Qt5.9Creator创建一个画布和鼠标在画布上拖拽出一个矩形的实例,具体的步骤如下所述: 1.1新建一个Widget工程,基类选择为QDialog。在Dialog.h头文件中添加如下代码: 1.2...
  • 画家QPainter能很多简单的线条和矩形,要加载图片则需要QPixmap、QBitmap、QImage和 QPicture。 示例项目:01_PaintEvent 代码: #include "widget.h" #include "ui_widget.h" #include <QPainter> #...
  • QT画直线、矩形,鼠标消息

    热门讨论 2013-08-23 16:37:10
    注释很完整,适合新手学习。QT5.0下写的。
  •  为了能够使用Qt开发图形绘制软件,首先应该掌握Qt的坐标系统。在Qt中,通过QPainter类来控制它的坐标系统。连同QPaintDevice类与QPaintEngine类,QPainter类构成了Qt绘图系统的基础。其中,QPainter用于执行绘图的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,977
精华内容 2,390
关键字:

用qt画矩形

友情链接: siftDemoV4.zip