精华内容
下载资源
问答
  • qt 曲线 代码

    2018-05-15 13:22:06
    qt画曲线图的测试代码,运行稳定可靠,希望有一定参考价值
  • qt画线、画一条线

    2021-07-07 11:48:37
    catalog示例 示例 两端淡,中间稍粗 double w = 0.06; / 不能为0 int _x = 0; FOR(i, 1, 5, 1){ painter.setPen( QPen(Qt::black, w));...} / 每个100像素,画线 FOR(i, 1, 5, 1){ painter.setPen( QPen(Qt:

    catalog

    示例

    在这里插入图片描述
    两边淡、中间粗

     / 中间最粗 是 _Ma_w(一般0.5左右)。  分成20份,左右各10份
    void Painter_draw_line(QPainter& p, int x1, int y1, int x2, int y2, double _Ma_w){
        double sub_x = (double)(x2 - x1) / (double)20, sub_y = (double)(y2 - y1) / (double)20;
        double sub_w = _Ma_w / (double)10;
        double _x = x1, _y = y1, _w = sub_w;
        FOR(i, 1, 10, 1){
            p.setPen(QPen(Qt::black, _w));
            p.drawLine( QPointF(_x, _y), QPointF(_x+sub_x, _y+sub_y));
            _w += sub_w;
            _x += sub_x, _y += sub_y;
        }
        FOR(i, 1, 10, 1){
            p.setPen(QPen(Qt::black, _w));
            p.drawLine( QPointF(_x, _y), QPointF(_x+sub_x, _y+sub_y));
            _w -= sub_w;
            _x += sub_x, _y += sub_y;
        }
    }
    
    展开全文
  • Qt画线条

    千次阅读 2017-01-08 15:37:15
    情况是这样的,现在设计一个地图,地图上的点(假设为pushButton)在Qt Designer中进行勾勒,都放在一个frame里面,然后将一些地图上联通的点使用直线连接起来.嗯....其实这是图的基本演示.....如果你没看明白我在说什么,...

    转自:

    http://blog.csdn.net/yuxiaohen/article/details/7697989   

    情况是这样的,现在设计一个地图,地图上的点(假设为pushButton)在Qt Designer中进行勾勒,都放在一个frame里面,然后将一些地图上联通的点使用直线连接起来.嗯....其实这是图的基本演示.....如果你没看明白我在说什么,那就看下面的图吧




    上面的线条有锯齿.....官方有个demo,看截图



    里面的线条十分优美....不过在下才疏学浅....还没吃透这个demo....先看看图1(就是在下弄的那个有锯齿的...)主要就是重载了paintEvent事件


    首先,静态图是在designer里面勾勒的,就是没有直线的图(有人喜欢纯码代码来构建UI.....不过我属于比较懒的人.....就直接用designer了....)


    在Qt Designer里面有一个和纯手工子类化大致相同的功能,叫"提升"...来看看怎么使用



    重点在提升的类名称,和头文件

    提升的类名称是自己将要子类化QFrame的类的名称,头文件是自己要编码的...不是自动生成的...........


    我填的分别是Clandscape和promote.h


    看看promote.h的内容


    ----------promote.h-----------------------------------------------

    #include <QFrame>
    #include <QPainter>
     
    
    
    
    class sightSpot;
    class Clandscape : public QFrame{
    friend class Cmainwindow;
    private:
        sightSpot *buttons[5];
     
    
    public:
        //constructor and ~constructor
        Clandscape(QWidget *para_parentWidget);
     
    
    protected:
     
    
        void paintEvent(QPaintEvent *);
     
    
    };
     
    
    可以看到在protected里面对paintEvent进行了重载
    在看promote.cpp里面对这个重载函数进行了定义
    -------------promote.cpp--------------------
    #include "promote.h"
    /*Clandscape*/
    //constructor
    Clandscape::Clandscape(QWidget *para_parentWidget) : QFrame(para_parentWidget)
    {
    }
    //overload paintEvent
    void Clandscape::paintEvent(QPaintEvent *event)
    {
        QPainter painter(this);
        //1,2相距10
        painter.drawLine( QPointF(buttons[0]->x() + (buttons[0]->width() / 2),buttons[0]->y() + (buttons[0]->height() / 2)),QPointF(buttons[1]->x() + (buttons[1]->width() / 2),buttons[1]->y() + (buttons[1]->height() / 2)) );
        //1,3相距50
        painter.drawLine( QPointF(buttons[0]->x() + (buttons[0]->width() / 2),buttons[0]->y() + (buttons[0]->height() / 2)),QPointF(buttons[2]->x() + (buttons[2]->width() / 2),buttons[2]->y() + (buttons[2]->height() / 2)) );
        //2,5相距5
        painter.drawLine( QPointF(buttons[1]->x() + (buttons[1]->width() / 2),buttons[1]->y() + (buttons[1]->height() / 2)),QPointF(buttons[4]->x() + (buttons[4]->width() / 2),buttons[4]->y() + (buttons[4]->height() / 2)) );
        //3,5相距30
        painter.drawLine( QPointF(buttons[2]->x() + (buttons[2]->width() / 2),buttons[2]->y() + (buttons[2]->height() / 2)),QPointF(buttons[4]->x() + (buttons[4]->width() / 2),buttons[4]->y() + (buttons[4]->height() / 2)) );
        //3,4相距20
        painter.drawLine( QPointF(buttons[2]->x() + (buttons[2]->width() / 2),buttons[2]->y() + (buttons[2]->height() / 2)),QPointF(buttons[3]->x() + (buttons[3]->width() / 2),buttons[3]->y() + (buttons[3]->height() / 2)) );
        //4,5相距25
        painter.drawLine( QPointF(buttons[3]->x() + (buttons[3]->width() / 2),buttons[3]->y() + (buttons[3]->height() / 2)),QPointF(buttons[4]->x() + (buttons[4]->width() / 2),buttons[4]->y() + (buttons[4]->height() / 2)) );
    }
     
    
    ok.....就这样完成了对paintEvent的重载....
    展开全文
  • QT画线

    千次阅读 2014-10-26 21:48:49
    Qt学习之路(24): QPainter 2009-11-26 22:43:41 标签:C++ 教程 学习 QT教程 Qt 多些大家对我的支持啊!有朋友也提出,前面的几节有关event的教程缺少例子。因为event比较难做例子,也就没有去写...
     Qt学习之路(24): QPainter
    2009-11-26 22:43:41
    转载地址  ::        http://devbean.blog.51cto.com/448512/235332/
    多些大家对我的支持啊!有朋友也提出,前面的几节有关event的教程缺少例子。因为event比较难做例子,也就没有去写,只是把大概写了一下。今天带来的是新的部分,有关Qt的2D绘图。这部分不像前面的内容,还是比较好理解的啦!所以,例子也会增加出来。
     
    有人问豆子拿Qt做什么,其实,豆子就是在做一个Qt的画图程序,努力朝着Photoshop和GIMP的方向发展。但这终究要经过很长的时间、很困难的路程的,所以也放在网上开源,有兴趣的朋友可以来试试的呀…
     
    好了,闲话少说,来继续我们的学习吧!
     
    Qt的绘图系统允许使用相同的API在屏幕和打印设备上进行绘制。整个绘图系统基于QPainter,QPainterDevice和QPaintEngine三个类。
     
    QPainter用来执行绘制的操作;QPaintDevice是一个二维空间的抽象,这个二维空间可以由QPainter在上面进行绘制;QPaintEngine提供了画笔painter在不同的设备上进行绘制的统一的接口。QPaintEngine类用在QPainter和QPaintDevice之间,并且通常对开发人员是透明的,除非你需要自定义一个设备,这时候你就必须重新定义QPaintEngine了。
     
    下图给出了这三个类之间的层次结构(出自Qt API 文档):
     
    QPainter
     
    这种实现的主要好处是,所有的绘制都遵循着同一种绘制流程,这样,添加可以很方便的添加新的特性,也可以为不支持的功能添加一个默认的实现方式。另外需要说明一点,Qt提供了一个独立的QtOpenGL模块,可以让你在Qt的应用程序中使用OpenGL功能。该模块提供了一个OpenGL的模块,可以像其他的Qt组件一样的使用。它的不同之处在于,它是使用OpenGL作为显示技术,使用OpenGL函数进行绘制。对于这个组件,我们以后会再介绍。
     
    通过前面的介绍我们知道,Qt的绘图系统实际上是说,使用QPainter在QPainterDevice上面进行绘制,它们之间使用QPaintEngine进行通讯。好了,下面我们来看看怎么使用QPainter。
     
    首先我们定义一个组件,同前面的定义类似:
     
    class PaintedWidget :  public QWidget 

    public
            PaintedWidget(); 
     
    protected
             void paintEvent(QPaintEvent * event); 
    };
     
    这里我们只定义了一个构造函数,并且重定义paintEvent()函数。从名字就可以看出,这实际上是一个事件的回调函数。请注意,一般而言,Qt的事件函数都是protected的,所以,如果你要重写事件,就需要继承这个类了。至于事件相关的东西,我们在前面的内容已经比较详细的叙述了,这里不再赘述。
     
    构造函数里面主要是一些大小之类的定义,这里不再详细说明:
     
    PaintedWidget::PaintedWidget() 

            resize(800, 600); 
            setWindowTitle(tr( "Paint Demo")); 
    }
     
    我们关心的是paintEvent()函数的实现:
     
    void PaintedWidget::paintEvent(QPaintEvent * event

            QPainter painter( this); 
            painter.drawLine(80, 100, 650, 500); 
            painter.setPen(Qt::red); 
            painter.drawRect(10, 10, 100, 400); 
            painter.setPen(QPen(Qt::green, 5)); 
            painter.setBrush(Qt::blue); 
            painter.drawEllipse(50, 150, 400, 200); 
    }
     
    为了把我们的程序运行起来,下面是main()函数:
     
    int main( int argc,  char *argv[]) 

            QApplication app(argc, argv); 
            PaintedWidget w; 
            w.show(); 
             return app.exec(); 
    }
     
     
    运行结果如下所示:
     
     
    首先,我们声明了一个QPainter对象。注意,我们在这个函数的栈空间建立了对象,因此不需要delete。
     
    QPainter接收一个QPaintDevice*类型的参数。QPaintDevice有很多子类,比如QImage,以及QWidget。注意回忆一下,QPaintDevice可以理解成要在哪里去画,而现在我们希望在这个widget上画,因此传入的是this指针。
     
    QPainter有很多以draw开头的函数,用于各种图形的绘制,比如这里的drawLine,drawRect和和drawEllipse等。具体的参数请参阅API文档。下图给出了QPainter的draw函数的实例,本图来自C++ GUI Programming with Qt4, 2nd Edition.
     
    展开全文
  • QT实现画线画板

    热门讨论 2013-02-05 11:40:32
    这是一个QT编程的示例,一个QT画板的代码,简单适用QT初学者。
  • Qt Scene graph画线,并在QML中使用,相比于Canvas和QPainter的方式,在android中效果不错。亲测可用
  • qt中绘制曲线

    2018-12-11 09:18:59
    qt中绘制过指定点集的曲线 功能:1.过指定点集 2.绘制曲线 可能问题:曲线不够平滑
  • Qt画线示例

    2013-07-16 10:13:46
    第一张图是Graphics View的,第二个是DrawApp的
  • QT画曲线程序

    热门讨论 2011-09-20 10:16:45
    QT画曲线
  • Qt中如何实现按钮不同,出来的线颜色不同啊?使用什么函数?
  • qt 旋转矩形

    2018-05-01 14:13:36
    qt 矩形框、旋转矩形、先直线、再矩形、用于抠图
  • Qt 实现画线笔锋效果详细原理

    千次阅读 多人点赞 2020-02-14 17:37:43
    之前写过一篇文章介绍Qt中绘制平滑曲线的两种方式,文章在这里。这篇文章详细介绍了绘制的原理和实现方式,那么,如果要在此曲线上实现笔锋效果怎么做呢? 所谓的笔锋效果,就是钢笔书写抬笔时的笔尖,也就是说,...

    前言

    之前写过一篇文章介绍Qt中绘制平滑曲线的两种方式,文章在这里。这篇文章详细介绍了绘制的原理和实现方式,那么,如果要在此曲线上实现笔锋效果怎么做呢?

    所谓的笔锋效果,就是钢笔书写抬笔时的笔尖,也就是说,绘制曲线抬笔时形成一个笔尖的效果。

    话不多说,直接来看效果:

    动画效果如下:
    在这里插入图片描述

    实现原理

    要实现该效果,需要完成以下几个关键步骤:

    • 1.每两个点形成一个贝塞尔曲线path进行绘制
    • 2.最新的一条path绘制细线(笔锋最细处的宽度)
    • 3.倒数第二条path绘制粗线(正常的线条宽度)
    • 4.在两条path连接处补充点使其过渡平滑

    接下来一步步的分析,首先第一条,每两个点形成一个贝塞尔曲线path进行绘制,这个比较简单,就不多讲了吧,也就是说,在move事件中,每来一个新点,就让该点和前一个点生成一个贝塞尔曲线,使用QPainterPath中的quadTo函数,之所以要用贝塞尔曲线,是为了解决折线问题,这个在前面的文章中已经介绍过了。这里就不重复说咯。

    我们直接来看第二条: 最新的一个path绘制细线。

    这个怎么理解呢?看一个图示:

    以上是线条放大的效果,最新的path,也就是上面的newPath,通过当前点和前一个点生成的这条path,绘制一条细线,这条线就作为笔锋,假如这时候抬笔,那么newPath就是最后一条线段,那么笔锋就是这条线来形成的。

    做完第二步,我们看一下绘制效果:

    第三步:倒数第二条path绘制粗线(正常的线条宽度)
    从上面的图示可以看到,我们将最新的newPath绘制细线,那么如果这时候又出现一个新的点,形成了新的path,而之前的newPath就会变成前一个path,这里命名为lastPath,由于该path还是细线,所以这里我们需要将前一个path重新补充绘制成正常的粗线,图示如下:

    这里的黄线,也就是我们补充绘制的线条,而最新的path依然是细线,根据以上示意图就很容易明白了。

    所以简单来说,就是不断的将最新path绘制成细线,然后将前一个path补充绘制成粗线。

    看一下效果:

    为了区分不同的path,这里采用了不同的颜色来代表,每一段颜色代表一个path,最新的path就是右边的绿色线条,可以看到最新的path和前一条path由于线宽不同, 所以连接处并不平滑,所以要解决这个问题,需要做最后一步:补点。

    什么是补点,就是说我们需要在连接处 根据最新path的线条路径来绘制一系列的点进行填充,使其连接处看起来平滑,图示如下:

    上面的圈圈就是补充的点,点与点之间距离越小,看起来就越平滑,而圈圈的圆心点是跟随最新的path线条走的,就是path线的线条高度的中心点,圈圈的半径大小逐渐变小。

    再看看补充点后的效果:

    可以看到,笔尖黑色的地方线条就是通过补充点来实现的。

    那么,问题来了,如何知道最后这条path的路径呢?
    其实Qt已经提供了接口,我们通过QPainterPath来生成的曲线,这个类提供了一个函数叫pointAtPercent,定义如下:

    在这里插入图片描述

    这个接口就是返回在path曲线上的坐标点,通过传入百分比来调用,很方便了吧。
    我这里的补充点实现方式,就是通过循环的不断的绘制:

    //在两个path连接处绘制补充点,使其连接处平滑
    void WbCanvasItem::drawPatchPoint(QPainter * painter,QPainterPath path)
    {
        qreal temp = (PENWIDTH-3)/100.;
        int k = 0;
        for (qreal i = 0;i < 1; i+=0.01) {
            k++;
            painter->setPen(QPen(Qt::black,PENWIDTH-temp*k, 
                                 Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin));
            painter->drawPoint(path.pointAtPercent(i));
        }
    }
    

    前三步骤代码:

    QPainterPath lastPath = obj->StrokeLastPath(PENWIDTH);
    m_pRealPainter->fillPath(lastPath,Qt::red);//填充轮廓
    path = obj->StrokePath(3);
    m_pRealPainter->fillPath(path,Qt::red);//填充轮廓
    drawPatchPoint(m_pRealPainter,obj->path());
    

    ok ,整个实现方式已介绍完成,本文主要讲解原理,代码未整理,就不上传了,用到的关键函数已经介绍过,只要明白原理过后,根据原理一步步的操作,就可以实现了。

    Qt 实现钢笔画线效果详细原理

    展开全文
  • 一个比较不错的Qt画线代码

    千次阅读 2014-10-26 21:06:28
    //画线 pen.setStyle( Qt :: SolidLine ); pen.setColor( Qt :: blue ); painter.setPen(pen); painter.drawLine(rect().topLeft(), rect().bottomRight()); //空心矩形 pen....
  • QT实现DDA、中点画线法以及画圆和椭圆,点击画图按钮,然后在网格上拖动鼠标,实现画线程序,画圆和椭圆和画直线方法类似。上传的是成功运行后的QT工程文件的压缩包。
  • 使用QT动态绘制动态曲线,亲自调试成功 支持最新QT版本QT5.0 实时绘制,实时显示,生产随机数,绘制波形 (Use QT dynamic mapping dynamic curve, personally successful commissioning Support for the latest version...
  • 关于QT画线条的优化

    千次阅读 2012-08-07 12:43:52
    qt中由于机制问题,要绘图就必须要调用paintEvent所以要做到流畅又不占用cpu就要用update(Qrect)来处理
  • 通过重写paintEvent函数来实现贝塞尔,同时可在界面上通过鼠标点击来绘制/选择节点,并且可拖动节点调节位置
  • QT画线教程(GraphicsViewFramework)

    千次阅读 2013-02-04 16:50:01
    现在基本上也已经到了2D绘图部分的尾声,所谓重头戏都是在最后压轴的,现在我们就要来...Qt的白皮书里面这样写道:“Qt Graphics View 提供了用于管理和交互大量定制的 2D 图形对象的平面以及可视化显示对象的视图 w
  • Qt画sin、cos曲线

    2019-07-14 11:08:06
    利用Qt,带有界面,出sin、cos曲线,傅里叶变换,代码清晰
  • 之前在网上查询了大量资料来实现在Qt的label中一组直线,逐条选中并移动。本程序做了简单的实现,但是程序中的直线选中部分灵敏度不是很高,如果有需要的可以下载进行改进,如果有跟好的方法判断选中,可以反馈给...
  • qt画旋转曲线

    2020-07-06 09:13:17
    qtz中如果曲线涉及到旋转会使用矩阵变幻,这儿有一个秘诀,就是先平移到旋转中心,在设置旋转角度,然后平移到旋转中心的负方向,最后就可以按需求出来 p.drawRect(QRect(100,100,200,200)); p.translate...
  • QT画曲线的程序

    2012-09-09 21:07:06
    大家来看看,有关于QT画曲线的程序,给大家参考一下
  • QT画直线 粗线和细线长短不一致

    千次阅读 2019-04-24 11:16:05
    QT画直线 粗线和细线长短不一致 原因是画笔有个笔帽的样式 笔帽的样式 所谓笔帽是个很奇怪的东西, 如果搞不好的话, 很容易被迷惑到了. 笔帽会在每绘制每一截线时, 在起点和终点都添加一点点的东西, 而且这一些笔帽的...
  • QT画直线、矩形,鼠标消息

    热门讨论 2013-08-23 16:37:10
    注释很完整,适合新手学习。QT5.0下写的。
  • Qt:任意画线

    2018-09-07 20:36:00
    widget.h #ifndef WIDGET_H #define WIDGET_H #include #include #... //不要画点,画线有专门的函数 // } // } QPainter p(this); for(int i=0; i(); ++i) { const QVector& line = _lines.at(i); for(int j=0; j
  • QT 动态曲线图,当输入超出X轴范围时,曲线整体左移,坐标刻度也随之改变;
  • 1.7 qt.go 画线样式

    2018-12-21 10:44:23
    02_画线 http://doc.qt.io/qt-5/qt.html#GlobalColor-enum有些全局的变量如 Qt::ImhHiddenText Qt::Key_Escape Qt::white 在kitech\qt.go\qtcore\qnamespace.go Qt Namespace 中定义了很多的全局变量值,咱们...
  • Qt实现点击添加图片,并可以在图片上画线、矩形、圆
  • 主要介绍了Qt 实现画线笔锋效果详细原理及示例代码。文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 10,331
精华内容 4,132
关键字:

qt画线