Qt 使用QPainter绘图问题 20C

我在mainwindow里定义了成员函数drawArc,用来画一个镂空的扇形

void drawArc(QLabel *label,QPixmap pixmap, QPainter *painter, QColor color, qreal startangle , qreal spanangle )
    {
    //---------------------------------------------------------------------------------------
    QPixmap tempPixmap = pixmap;                                // 定义画布
    painter->begin(&tempPixmap);
    painter->setRenderHint(QPainter::Antialiasing,true);
    painter->setPen(Qt::NoPen);                                 // 没有轮廓
    //----------------------------------------------------------------------------------------
    QRectF rect(0,0,pixmap.width(),pixmap.width());      //用来画扇形的正方形
    painter->setBrush(color);                                   // 设置颜色
    int width = pixmap.width()/6;
    //int height = rect->height()/6;
    QPainterPath path;

    path.arcTo(rect, startangle, spanangle);
    QPainterPath subPath;
    subPath.addEllipse(rect.adjusted(width, width, -width, -width));

    painter->drawPath(path - subPath);
    painter->end();
    label->setPixmap(tempPixmap);
}

调用是这样写的:
drawArc(callerLabel,pixmap,&painter,color[0],0,180);

图片说明

最后结果出来确实这样的,求问高手!!!急!!!

0

2个回答

1

QRectF rectangle(10.0, 20.0, 80.0, 60.0);
int startAngle = 30 * 16;
int spanAngle = 120 * 16;

QPainter painter(this);
painter.drawPie(rectangle, startAngle, spanAngle);
如果要做一个镂空的扇形就要画两个扇形一大一小的就可以了

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
QT使用GDI和OpenGL绘图,相比QPainter绘图降低CPU占用率
QPainter在高频绘画的使用CPU占用较高,我们用以下方法解决1、使用GDI绘图,GDI因为是使用GPU绘图,会减少CPU占用GDI在QT中的使用方法:因为QT都是通过repaint和update事件触发paintEvent绘图,其他绘图会被覆盖所以需要以下方法实现GDI绘图一、在需要绘图的Widget构造函数写setAttribute(Qt::WA_PaintOnScreen, true);...
QT中使用QPainter在ui子控件中绘图
在使用QT中的QPainter绘制图片时发现其只能够在当前类中执行绘制操作。本文介绍一下怎么实现在ui的子控件中用QPainter实现绘图。以QLabel为例: 1.在QT工程中新建一个类PaintLabel,继承自QLabel。 //paintlabel.h文件#ifndef PAINTLABEL_H #define PAINTLABEL_H #include class PaintLa
如何使用QT的QPainter绘图和实时刷新?
如何使用QT的QPainter绘图和实时刷新? 2011-06-24 本文行家:_张_巍_ Qt是个很不错的GUI,现在已经更新到4.7了。最近的项目中用到了它,需要实时的显示一个画面,这就需要定期的刷新画面,本文章记录了使用QPainter类绘制图形的步骤,供参考。 Qt是个很不错的GUI,现在已经更新到4.7了。最近的项目中用到了它,需要实时的显示一个画面,这就需
QT基础(三)----QPainter画图功能 & 画图小项目
一 QPainter基础功能介绍 头文件mywidget.h #ifndef MYWIDGET_H #define MYWIDGET_H #include #include class Mywidget : public QWidget { Q_OBJECT public: explicit Mywidget(QWidget *parent = 0);
Qt 使用QPainter类在子控件上画图
因为事件过滤器的影响 无法直接使用QPainter类在子控件上实现画图操作,需使用eventFilter函数进行修改
【QT】QT从零入门教程(十三):QT画笔工具QPainter (双缓冲绘图)
  QPainter 用于执行绘图操作,其提供的 API 在 GUI 或 QImage、QOpenGLPaintDevice、QWidget 和QPaintDevice 显示图形(线、形状、渐变等)、文本和图像。   绘图系统由 QPainter 完成具体的绘制操作,QPainter 类提供了大量高度优化的函数来完成 GUI 编程所需要的大部分绘制工作。它可以绘制一切想要的图形,从最简单的一条直...
QT——绘图事件、鼠标事件、QPainter、键盘事件、光标样式、登录框密码回显模式、移除字符串前后的空白、对话框accept()
1、void QWidget::paintEvent(QPaintEvent * event) [virtual protected] ========================================================
QT使用QPainter绘图
QT使用QPainter绘图,只能在painEvent中绘图 void MainWindow::paintEvent(QPaintEvent *event) { QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing); painter.setPen(QPen(Qt::black
QT反锯齿
在用GDI+绘图时候,发现发大的png不会有锯齿,很漂亮,但是在qt中却有锯齿现象,因此网上查了一下,得到如下,确实有用,但还是不够gdi+平滑,由于贴图,因此用到了SmoothPixmapTransform http://blog.chinaunix.net/uid-24219701-id-4044333.html 反走样是图形学中的重要概念,用以防止通常所说的“锯齿”现象的出现
Qt 之图形(QPainter 的基本绘图)
Qt 中提供了强大的 2D 绘图系统,可以使用相同的 API 在屏幕和绘图设备上进行绘制,它主要基于QPainter、QPaintDevice 和 QPaintEngine 这三个类。 - QPainter 用于执行绘图操作,其提供的 API 在 GUI 或 QImage、QOpenGLPaintDevice、QWidget 和QPaintDevice 显示图形(线、形状、渐变等)、文本和图像。
Qt编程21:使用QPainter绘图二
实例:绘制圆矩形 //绘制圆矩形------------------ QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing,true); painter.setPen(QPen(Qt::red,2,Qt::SolidLine,Qt::RoundCap)); painter.
QPainter 与QML SceneGraph绘制效率对比测试
从半径为0开始,0.1个像素递增半径画同心圆,一直画到100,重复这一过程。
qt之双缓冲绘图
转载自:https://wizardforcel.gitbooks.io/qt-beginning/content/22.html 导语 在前面一节中,讲述了如何实现简单的涂鸦板,这一次我们将实现在涂鸦板上绘制图形,这里以矩形为例进行讲解。在后面还会提出双缓冲绘图的概念。 环境:Windows Xp + Qt 4.8.4+QtCreator 2.6.2 目录 一、绘制矩形二、双缓
Qpainter使用详解(实时刷新)
QPainter类本身提供了一个事件, voidSimpleExampleWidget::paintEvent(QPaintEvent *) { QPainter painter(this); painter.setPen(Qt::black); painter.setFont(QFont("Arial",30)); painter.drawTex...
Qt实现在QLabel上绘制2D图形
根据以往的经验,我们绘制图形的时候都是在paintevent()函数中实现的,每次移动或改变窗口都会调用该函数来实现绘制。 在paintevent函数中,通常需要设置QPainter对象,创建QPainter对象的同时需要指定绘图设备,即继承自QPainterDevice的子类作为绘图设备,绘制出来的图形将在这个设备上进行显示,Qt一共提供了4个这样的类,分别是QPixmap,QBitmap,QI
Qt 使用Painter在子控件上实现画图操作
在学习Qt使用Painter在绘图时,只能在其所在的类里进行操作,本文介绍怎么在子控件上实现使用Painter绘图功能。ui->frame->installEventFilter(this); //安装事件过滤器到窗口//事件过滤器 bool Widget::eventFilter(QObject *watched, QEvent *event){ if(watc...
QT画图教程5:QT中QPainter的使用及矩形、圆形等常见图形的画法
#includeQApplication> #include QWidget>  #include QPainter>  class MyMainWindow:public QWidget {  public:   MyMainWindow(QWidget *parent = 0);  private:   void paintEvent(QPaintEvent*);  QPai
QT中双缓冲加速绘制
QT中的绘制都是在函数paintEvent(QPaintEvent *event)中绘制的,而且必须在这个函数下面绘制。 绘制简单的图形的时候效率还是不错的,但是一旦绘制的内容比较多的时候,绘制的时候就是有些卡顿了。 有的同学就是说,可以使用线程的方式,多开一个线程就可以了,但是大家不要忘了,任何绘制的过程都是在paintEvent(QPaintEvent *event) 这个函数中实现的,...
Qt开发之绘画和QPainter绘图的坐标系转换
删繁就简单:实际上就是重写PaintEvent函数. 举例: void Widget::paintEvent(QPaintEvent *e) { QPainter TemPaint(this); /* TemPaint.setPen(QColor(0, 160, 230)); TemPaint.drawText(rect(), Qt::AlignC
QML中绘图(1、Canvas 2、QPainter与QML结合)
QML中的Canvas和HTML5中Canvas是一样的,可以参考W3CSchool中的学习方法:HTML 5 Canvas 参考手册 画线、删除线、删除全部实例: 不过,QML中的Canvas不够强大,画线会卡。我们用QPainter来实现画线,用QML来显示就好了, 方式如下: 1、先做好QPainter画线,做我们的类ALPaintedItem: (1)头文件...
QT:在子widget上画图
功能:导入点,在字widget上画图,因为右边还要添加列表显示点,采用托管的方式,让主widget管理子widgetvoid ludeng2::Onopenfile(){ FILE* cfile = NULL; ludeng2 a; // cfile = fopen("1.txt", "r"); if (cfile == NULL) { QMessageBox::information(NULL...
使用Qt在内存中画图
使用Qt在内存中画图 对于大多数Qt应用,我们在QWidget的paintEvent方法中创建和构造一个QPainter画图,或者在QGLWidget中的paintGL使用OpenGL函数画图,这是最常见的使用方式,并且基本能够满足应用需求。但是这把画图操作限制在了某一个方法之中,考虑一个这样的场景:客户想生成某个字体的字符图片,并把这些图片保存起来。在这个应用场景下,完全没有必要创建一个GUI
Qt5.2后的一种新的使用GDI绘图的方法
Qt使用GDI绘图关键在于获取HDC,对于Qt5来说,以前有两种方法。1、使用gui-privatepro或pri文件中增加QT += gui-private代码:#include <qpa/qplatformnativeinterface.h> QPlatformNativeInterface *fooPlatformNativeInterface= QGuiApplicatio...
Qt Quick实现的涂鸦程序
实现自己的Qt Quick元素,使用QPainter绘图……
QT 利用QPainter绘图的坐标系转换
Qt绘制图形时,少不了坐标计算,那么如何更好更快地计算出坐标呢?现在来分析一下。        如下图所示,原来坐标系是(0,0)X axis右Y axis下 现在想把它变成,坐标在窗口中间,X右,Y上,标准的数学中的坐标系。 Painter.setWindow(x,y,width().height()); 用setWindow这个函数,表示什么意思。前两个参数左上角位置,
QT中用QPainter类所画图像随窗口变化自适应变化
Qpainter类是QT中的一个画图类。该类是用画笔在窗口上直接绘制图像。通常情况下,图像的位置和大小在画图完成后就是定死的了。在实际应用中我们有时需要该图像随着窗口的拖动、最大化等操作下进行自适应变化。下面提出两种可以使所画图像可以随窗口自适应变化的方法。 第一种方法,用Qpainter类中的scale函数。代码如下: QPainter painter(this); static dou
qt反锯齿操作
QPainter::Antialiasing 告诉绘图引擎应该在可能的情况下进行边的反锯齿绘制 QPainter::TextAntialiasing 尽可能的情况下文字的反锯齿绘制 QPainter::SmoothPixmapTransform 使用平滑的pixmap变换算法(双线性插值算法),而不是近邻插值算法 painter.setRenderHint(Q...
Qt绘图——QPixmap的使用
原文地址::http://blog.csdn.net/kongdefei5000/article/details/11694463 相关文章 1、QT中Qpixmap的清除和保存问题 ----http://bbs.csdn.net/topics/391882069?page=1 QPixmap 的使用      直接给个例子: [cpp] vi
QT 绘制 局部刷新的N中方法
n个方案: 1、void QWidget::update ( const QRegion & rgn ) 这个update本身就能够只跟新指定区域的; 2、使用QImage类,操作一个图片的单一的像素点,然后用个定时器,不断的让你的图片在label里显示;即将所有东西都画在一个影子位图中,然后只在重画的时候画影子位图 3、参考文档主页,examples下,Graphics View下的 C
Qt双缓冲机制:实现一个简单的绘图工具(纯代码实现)
知识准备: 双缓冲机制: 在绘制控件时,首先将要绘制的内容绘制在一张图片中,再将图片一次性绘制到控件上。
Qt实用技巧:QPainterPath绘图路径(多次画同样的图形集合)
原博主博客地址:http://blog.csdn.net/qq21497936 本文章博客地址: 需求         根据配置文件,可不改变程序只调整配置文件可调整主页面上的字符串。 原理         1.读取文件,固定格式(文件在本文章中省略)         2.写一串字符,使用QPainterPath         3.注意QPainter的时候
Qt模块化画图,通过每次移动坐标系跟直接画图效率比较。
为了实现通用接口模块化画矩形,可以更改横纵参数来改变框的个数,实际效果如下:   左半边的实现代码,通过移动坐标系: if (1 != left)         {             /******************左耳横线***********************/             p->translate(12, 1 * y / 5 - 2);  ...
Qt 在控件上面绘图 label,pushbutton。。。。。
最近有点时间,就研究研究Qt ,提升一下自己 我记得我在刚开始学习Qt 的时候,想要在一个控件上面绘制图形,那就要构建一个新类来调用该控件的绘图函数 今天看到了狗哥的学习博客,感觉自己好渺小啊,按照狗哥的步骤,一步一步来练习,写了一个demo Qt 之所以不能在在任意控件上面绘图,是因为Qt的事件过滤器把控件的绘图事件给过滤了,自己知识不够,盗用狗哥的话 “在事件过
Qt 画图工具擦除操作,恢复透明色
在以transparent填充的QPixmap上用红色画笔画出了线,现需要擦除部分红色,恢复出原来的透明色。 使用QPainter::CompositionMode 图像叠加模式 下图简单示意了10种模式: 在Qt的官方文档里我们也找到了具体模式的解释 Constant Value Description QPai...
QPainter的一些实例测试
话不多说,直接上码!void Widget::paintEvent(QPaintEvent *e) { QBrush brush(QColor(0,0,255)); QFont font; font.setFamily("Microsoft YaHei"); font.setPointSize(20); QPainter painter(this); ...
qt中如果使用svg格式的图片在QPainter中绘制图形
在昨天,突然想到重构项目中的代码,然后就想用qvg格式的图片代替以前的IMAGE图片,这样就可以解决缩放有锯齿的问题。 然后就在网上搜索了很多方法,但是都没有看懂是怎么搞得,然后在公司其他大牛的帮助下,终于解决了这个问题。 下面就总结下如何绘制的。 要使用的svg图片格式,使用的类是QSvgRender类。 具体使用如下:  QSvgRenderer m_svgRen
qt 双缓冲绘图
refer to http://www.yafeilinux.com/?p=73 private slots: void mousePressEvent(QMouseEvent *event); void mouseMoveEvent(QMouseEvent *); void mouseReleaseEvent(QMouseEvent *); private:
Qpainter实时绘制图形动画效果
运用Qpinter进行实时绘图,可以根据给定的矩阵进行图形绘制,每隔0.1s绘制一个点来构建图形。
Qt QPainter中坐标系变换问题
一、坐标系简介。 Qt中每一个窗口都有一个坐标系,默认的,窗口左上角为坐标原点,然后水平向右依次增大,水平向左依次减小,垂直向下依次增大,垂直向上依次减小。原点即为(0,0)点,然后以像素为单位增减。 例如: void Dialog::paintEvent(QPaintEvent *) {     QPainter painter(this);     painter.se
qml使用Qpainter绘图
一、类的声明 定义一个map.h的头文件 注意: 1.必须要继承基类QObject   //为了重载paint函数,我继承QQuickPaintedItem 2.必须要有声明Q_OBJECT 3.被调用函数需要声明Q_INVOKABLE 4.类的构造函数 5. 如果在vs下编译需要配置map.h的属性(使用moc编译),否则报错,解决方法见链接   //map.h #ifnde...
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 java 机器学习绘图 python绘图教程