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 使用QPainter绘图
QPainter 绘制一些简单的图形,也可以设置文字,设置笔,路径等。需要实现paintEvent这个方法,然后使用QPainter需要传入this指针,表示父类会调用。 #include "basicshapewindow.h" #include "ui_basicshapewindow.h" BasicShapeWindow::BasicShapeWindow(QWidget *par
QT使用QPainter绘图
环境:UBUNTU14.04/QT4 简介:     QT的二维图形引擎是基于QPainter类的,QPainter既可以绘制几何图形,又可以绘制像素映射,图像和文字,除此之外还有一些高级功能。     QPainter可以画在“绘图设备上”,如QWidget,QPixmap,QImage或者QSvgGenerator,也可以与QPrinter一起使用来打印文件和创建PDF文档,这意
Qt之图形(QPainter的基本绘图)
简述 Qt 中提供了强大的 2D 绘图系统,可以使用相同的 API 在屏幕和绘图设备上进行绘制,它主要基于QPainter、QPaintDevice 和 QPaintEngine 这三个类。 QPainter 用于执行绘图操作,其提供的 API 在 GUI 或 QImage、QOpenGLPaintDevice、QWidget 和...
如何使用QPainter绘图
我想问一下为什么如果我要实现按下一个按钮就实现绘制一条直线之类的怎么实现rn为什么我直接在按钮函数里面加上一下代码却不行rnrnQPainter p(this);rnp.drawLine(1,1,100,100);rnrn为什么不能实现呢~~(刚刚开始学习Qt这些都不怎么懂),希望高手指点~rnrn
QT 利用QPainter绘图的坐标系转换
Qt绘制图形时,少不了坐标计算,那么如何更好更快地计算出坐标呢?现在来分析一下。        如下图所示,原来坐标系是(0,0)X axis右Y axis下 现在想把它变成,坐标在窗口中间,X右,Y上,标准的数学中的坐标系。 Painter.setWindow(x,y,width().height()); 用setWindow这个函数,表示什么意思。前两个参数左上角位置,
qml使用Qpainter绘图
一、类的声明 定义一个map.h的头文件 注意: 1.必须要继承基类QObject   //为了重载paint函数,我继承QQuickPaintedItem 2.必须要有声明Q_OBJECT 3.被调用函数需要声明Q_INVOKABLE 4.类的构造函数 5. 如果在vs下编译需要配置map.h的属性(使用moc编译),否则报错,解决方法见链接   //map.h #ifnde...
关于绘图QPainter 的问题
QConicalGradient CG(60,40,30);rn CG.setColorAt(0,Qt::gray);rn CG.setColorAt(0.4,Qt::red);rn CG.setColorAt(0.8,Qt::green);rn painter.setBrush(CG);rn painter.drawEllipse(0,0,100,100);rnrn这个锥形渐变怎么把最后画椭圆的参数改一下怎么效果就不一样了rn比如改成painter.drawEllipse(100,100,100,100);rn还有圆形渐变也是,怎么回事?
QT——QPainter的使用
Qpainter创建的对象只能在绘画事件paintEvent(QPaintEvent *event)里使用 使用方法如下 QPainter painter(this);     painter.setPen(Qt::red);     painter.drawLine(263, 470, 1200, 470);     painter.drawLine(730, 80, 730, 860);  ...
使用QPainter绘图(文字和图片)
本课程起始于基础的开发环境搭建和Qt Creator介绍,帮助初学者入门;着力于Qt的内在机制,由浅入深介绍信号与槽、Qt模板库、事件、文件处理、XML、网络、多线程、各种GUI控件、布局管理器等各种Qt基础主题(这些主题可同时在Qt桌面编程和Android平台上使用),同时辅以简洁有效有针对性的实例程序(每个示例程序都可以在 Android 平台上运行)。
我的Qt学习之路——QPainter基本绘图
...
Qt中的QPainter问题
在Qt中出现如下问题 A paint device can only be painted by one painter at a time. 找来找去,结果应该是这句代码有问题 QPainter painter = new QPainter(this); 这是因为这种赋值方式,右边的new新建了一个实例然后将这个实例拷贝给了painter所以导致有两个
Qt QPainter的问题
我需要在一个窗口上画多个图形,比如4个吧,然后这4个图形需要自己独立的旋转,开始我创建了4个QPainter对象,发现这4个图形会相互干扰,一个窗口只能创建一个QPainter对象,请问各位大牛如何解决啊。。。。。
Qt Qpainter
我希望在widget上画两条直线,并且可以旋转;rn我的代码如下:rnrnvoid Widget::paintEvent(QPaintEvent *)rnrn QPainter painter(this); rnrn painter.setBrush(Qt::red);rn painter.setPen(QPen(Qt::red,Qt::SolidLine));rnrn //L1rn painter.translate(100,100);//以指针根部为旋转中心rn painter.rotate(Angle1);rn painter.translate(-100,-100);//恢复原点rn painter.drawLine(50,100,100,100);rnrn //L2rn painter.translate(200,100);//以指针根部为旋转中心(移动原点)rn painter.rotate(Angle2);rn painter.translate(-200,-100);//恢复原点rn painter.drawLine(150,100,200,100);rnrnrn实际是第一条线可以正常的旋转,但是第二条线却是很乱;rn是不是第一条线处理完了之后要复原一些东西啊,求各位大牛帮忙。
Qt中QPainter的问题
我在进行2D绘制时,采用了QPainter的方法,想在QLabel上绘图,所以直接就QPainter painter, painter.begin(label);报错QPainter::begin: Paint device returned engine == 0, type: 1 QPainter::end: Painter not active, aborted QWidget::pai
关于QPainter绘图
实在想不出怎么写了,我是新手,在写一个坦克游戏,在绘制方面不会了,rn大致结构是这样,class tank : public QWidget, class Btank:public tank, rnclass Gtank:public tank, rnclass Widget : public QWidget (此为主窗口)此类的构造函数中包含:rnrnGtank *u= new Gtank(this);rnBtank *i= new Btank(this);rnrn就是想把这两种坦克都画在Widget里,相关函数如下:rnvoid tank::paintEvent(QPaintEvent *) rnrn QPainter painter(this);rn painter.drawPixmap(QPoint(0,0),*pix);rnrnrnrnvoid Btank::draw() rnrn if(alive==true)rn rn pix=new QPixmap(800,600);rn pix->fill(Qt::blue);rn QPainter painter(pix);rn image.load("image/down.png");rn painter.drawImage(QPoint(X,Y),image); //---此处X,Y都是0,构造函数中赋值了rn rnrnrnvoid Gtank::draw() rnrn if(alive==true)rn rn pix=new QPixmap(800,600);rn pix->fill(Qt::green);rn QPainter painter(pix);rn painter.drawImage(QPoint(X,Y),image);//此处X,Y都是三百rn rnrnrnrn主窗口是800*600的,运行后无报错,但是效果不对,如果只是Gtank u; u.show()而不是Widget w; w.show()就还正常rnrn求帮助,不知道这算伸手不。。给个大致思路也行,在网上看了QPainter的相关文档,可是用起来还是不懂
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类 画板的使用
//头文件 void paintEvent(QPaintEvent *paintEven); // //Set Paint Test void mouseWidget::paintEvent(QPaintEvent *paintEven) { QPainter painter(this); painter.setPen(QPen(QColor(255,0,0))); pain
使用QPainter绘图(线条、形状、路径)
本课程起始于基础的开发环境搭建和Qt Creator介绍,帮助初学者入门;着力于Qt的内在机制,由浅入深介绍信号与槽、Qt模板库、事件、文件处理、XML、网络、多线程、各种GUI控件、布局管理器等各种Qt基础主题(这些主题可同时在Qt桌面编程和Android平台上使用),同时辅以简洁有效有针对性的实例程序(每个示例程序都可以在 Android 平台上运行)。
qt中如何画图,使用QPainter,提示QPainter is not active
如题,我只需要在窗体的一个指定区域内刷为黑色,我在程序中调用QPainter,提示QPainter is not active,难道QPainter只能在PaintEvent中才能调用吗。代码如下,请高手帮忙指点,我要的效果只是刷为黑色,用其他方法也行:rnvoid MainWindow::initLogo()rnrn /* brush a black background */rn QPainter paint(this);rn paint.setPen(QPen(Qt::black));rn paint.setBrush(QBrush(Qt::black, Qt::SolidPattern));rn paint.drawRect(10, 20, this->width() - 20, this->height() - 30);rnrn .......rnrn
Qt中QPainter类的问题
我要实现的目的是在已有图片上绘制文字 rnQImage *image =new QImage(":/images/yesterday.JPG");rnQPainter *painter(&image);rn先定义一个QImage对象image,然后用图片初始化imagern接下来定义一个QPainter对象rn但是出现错误“cannot convert ‘QImage**’to‘QPainter’in initialization”rnrn我应该怎么设置这个QPainter实现的是对image的操作
Qt——QPainter画图
QPainter painter(ui->frame_window); //括号内设置画图位置 QPen pen; painter.setRenderHint(QPainter::Antialiasing, true); pen.setColor(Qt::gray); pen.setWidth(1); painter.setPen(pen); painter.drawLin...
QT QPainter scale和rotate
我的目的是画一个矩形 让矩形x方向缩小一倍 ,在已某个点 ,旋转45度.rnrn我的做法是[img=https://img-bbs.csdn.net/upload/201604/27/1461741754_922272.png][/img]rnrn但结果是[img=https://img-bbs.csdn.net/upload/201604/27/1461741919_535364.jpg][/img]rnrn最后旋转的但结果是最后矩形变成四边形了...rn请问怎么解决
QPainter的qt绘制介绍
课程讲解基于QT5.9 SDK,包含QT界面编程的核心内容,并提供全部源码,课程讲解方式是接口讲解、分析、演示示例,课程讲解QTCreator在不同平台的配置方法,linux,windows,mac,课程演示主要以vs2015+QT5.9为主,开始会讲解QTCreator配置。课程源码基于c++ 11以上版本,建议至少安装vs2013以上。课程后会做一个图像编辑器的示例。
Qt里QPainter画图问题
在一个函数里经过信息提取,知道了一个点的经纬度,然后需要在对应的像素点画一个三角形,怎么实现?
QT new QPainter导致的问题
平台windows 7,Qt 4rn.h:rn[code=c]rn#ifndef KEYBOARDEVENTTEST1_Hrn#define KEYBOARDEVENTTEST1_Hrnrn#include rn#include rn#include rn#include rn#include rn#include rn#include rn#include rn#include "ui_keyboardeventtest1.h"rnrnclass KeyboardEventTest1 : public QWidgetrnrn Q_OBJECTrnrnpublic:rn KeyboardEventTest1(QWidget *parent = 0, Qt::WFlags flags = 0);rn ~KeyboardEventTest1();rnrn void drawPix();rn void keyPressEvent(QKeyEvent *);rn void paintEvent(QPaintEvent *);rnrnprivate:rn Ui::KeyboardEventTest1Class ui;rnrnprivate:rn QPixmap *pix;rn QImage image;rn int startX;rn int startY;rn int width;rn int height;rn int step;rn;rnrn#endif // KEYBOARDEVENTTEST1_Hrnrn[/code]rn.cpprn[code=c]rn#include "keyboardeventtest1.h"rnKeyboardEventTest1::KeyboardEventTest1(QWidget *parent, Qt::WFlags flags)rn :QWidget(parent)rn rn setWindowTitle(tr("Key Event"));rnrn setAutoFillBackground(true);rnrn QPalette palette = this->palette();rn palette.setColor(QPalette::Window,Qt::white);rn setPalette(palette);rnrn setMinimumSize(512,256);rn setMaximumSize(512,256);rnrn width=size().width();rn height=size().height();rn pix = NULL;rn pix = new QPixmap(width,height);rn pix->fill(Qt::white);rnrn step=32;rn image.load("a.jpg");rnrn startX=0;rn startY=0;rnrn drawPix();rnrnrnKeyboardEventTest1::~KeyboardEventTest1()rnrnrnrnvoid KeyboardEventTest1::drawPix()rnrn pix->fill(Qt::white);rn QPainter painter(pix);rn QPen pen(Qt::DotLine);rn painter.setPen(pen);rn for(int i=step;imodifiers() == Qt::ControlModifier)rn rn if(event->key() == Qt::Key_Left)rn rn startX=(startX-1<0)?startX:startX-1;rnrn rn if(event->key() == Qt::Key_Right)rn rn startX=(startX+1+image.width ()>width)?startX:startX+1;rnrn rn if(event->key() == Qt::Key_Up)rn rn startY=(startY-1<0)?startY:startY-1;rnrn rn if(event->key() == Qt::Key_Down)rn rn startY=(startY+1+image.height()>height)?startY:startY+1;rnrn rn rn elsern rn startX=startX-startX%step;rn startY=startY-startY%step;rnrn if(event->key() == Qt::Key_Left)rn rn startX=(startX-step<0)?startX:startX-step; rn rn if(event->key() == Qt::Key_Right)rn rn startX=(startX+step+image.width()>width)?startX:startX+step; rn rn if(event->key() == Qt::Key_Up)rn rn startY=(startY-step<0)?startY:startY-step; rn rn if(event->key() == Qt::Key_Down)rn rn startY=(startY+step+image.height()>height)?startY:startY+step;rn rn if(event->key() == Qt::Key_Home)rn rn startX=0;rn startY=0;rn rn if(event->key() == Qt::Key_End)rn rn startX=width-image.width();rn startY=height-image.height();rn rn rn drawPix();rn update(); rn rnrnvoid KeyboardEventTest1::paintEvent(QPaintEvent *)rnrn QPainter painter(this);rn painter.drawPixmap(QPoint(0,0),*pix);rnrnrn[/code]rnrn问题出现在drawPix()函数中,rn如果QPainter painter(pix);换成QPainter *painter = new QPainter(pix);的话,在屏幕第一次显示的时候,能够显示出正确的界面,但是当用户按ctrl和向左等箭头的时候,屏幕上就什么都不显示。如果使用QPainter painter(pix);就什么问题都没有,都能正常显示,想知道这是什么问题?!rnrn
qt中的QPainter与QPainterPath
最近在用Qt画一个测量温度的动态坐标图,对于温度变化的曲线可以用QPainter很容易画出来,只要每次update重绘就可以了,但是对于静态的坐标轴和标识,我不想每次重绘,于是我想用两个Qpainter来画,一个维护动态曲线,一个维护静态坐标轴和标识。rn但是,真正用的时候就发现两个QPainter会相互影响,比如第二个QPainter会覆盖第一个QPainter的曲线颜色,而且第一个QPainter不能调用end()函数再使用第二个QPainter,必须第二个先end()然后第一个才end()。我现在对于这两个类(QPainter和QPainterPath)的使用感觉很不熟悉。而且官方文档看起来好像没提这点。rn希望各位经常使用这两个类的大神解释下这两个类的使用,或者谈下你们的经验,谢谢!
如何在Qgraphicsview上使用QPainter绘图
书上有示例代码rnvoid MyWidget::paintEvent(QPaintEvent *event)rnrn QPainter painter(this);rn ......rnrn我使用Qtcreator创建了一个GUI程序,在"dialog1.ui"文件中拖了一个QGraphics View的控件grahphicsView,现在我想在dialog1上的graphicsView上绘图而不是在dialog1上绘图,paintEvent函数该如rn何声明?如何实现?rn是写void Dialog1::paintEvent()还是写void QGraphicsView::paintEvent();rn函数体里面是写QPainter painter(this);rn还是QPainter painter(ui->graphicsView);rn第一个是绘制在dialog1上面,而不是dialog1上的graphicsView上,第二个运行的时候报错rnQPainter::begin: Widget painting can only begin as a result of a paintEventrnQPainter::setRenderHint: Painter must be active to set rendering hintsrnQPainter::setPen: Painter not activernQPainter::setBrush: Painter not activernQPainter::begin: Widget painting can only begin as a result of a paintEventrnrn我C++不是很好,希望解答的朋友能够给出示例代码
请教:QPainter 怎样在子窗口绘图
用的QT Creator rnvoid Widget::paintEvent(QPaintEvent *)rnrn QPainter painter(this);rn 。。。rn 。。。//绘制一些简单的图rn}rnrn现在主窗口能够显示简单的图型 我在主窗口里 又拖了一个widget 一个label,现在想把这些图显示到widget 和label里面去 应该怎么做啊。。。rn 先行谢谢各位大虾了。
Qt学习笔记:QPainter
QPainter类负责绘画 简单来说,就是你想要将你的app设计成什么样子,都需要重写QPainter来实现 QPainter简单的绘图,我们通常用QPainter,举个例子:# -*- coding: utf-8 -*- # 简单的QPainter程序import sys from PyQt4.QtCore import * from PyQt4.QtGui import *class My
Qpainter绘图是在哪里绘的
想把qpainter绘出来的图和另外一个widget窗口合在一起,但是qpainter绘图也没创建什么界面,不知道是绘在什么上面的,如果我用QHBoxLayout来合并窗口,addWidget()括号里的参数应该填什么?
Qt开发之绘画和QPainter绘图的坐标系转换
删繁就简单:实际上就是重写PaintEvent函数. 举例: void Widget::paintEvent(QPaintEvent *e) { QPainter TemPaint(this); /* TemPaint.setPen(QColor(0, 160, 230)); TemPaint.drawText(rect(), Qt::AlignC
QT中Qpainter画表
实现表格的绘制 ,很好的是显现了painter,pen,bush的应用
qt QPainter 绘制跑马灯
使用qtcreator 绘制类似跑马灯的效果 换行圈,可以设置每个小车的颜色
【Qt】使用QPainter的drawPixmap()绘制多幅图片
众所周知,使用QLabel的setPixmap()就可以将图片显示出来,做视屏解码后显示也可以如此。但是为何我今天还要费力使用基函数drawPixmap()来做绘图?理由有这么些吧: 1、使用QLabel很耗费CPU,播放画面过多有卡卡的感觉; 2、drawPixmap()使用GPU处理,相对减轻了CPU的负担; 当然,今天这里,只是给出基本思路方法,并非对视频解码后的图像做原样的解析。
qt 使用Echart 绘图
qt echart 绘图 webview 解决qt4绘图问题
Qt 下使用线程绘图
1、自己创建一个类 myThread 1).创建一个类 myThread 继承与 QObject class myThread : public QObject 2).在类 myThread 中定义信号void updateImage(QImage image_date) 当图形绘制完成发送给对应的槽函数 3).在类 myThread 中定义子线程绘图函数drawImage()用于画...
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绘制文字、图片
1. 把字符串绘制在QPixmap上 QPixmap MainWindow::text2Pixmap(QString text) { QFontMetrics fmt(m_font); QPixmap result(fmt.width(text), fmt.height()); QRect rect(0,0,fmt.width(text), fmt.height(...
Qpainter与qt控件显示冲突
我用Qpainter画了一个时钟的时针,分针,秒针,我想在label上放一张图片作为这个钟的背景,可是这个label一直显示在指针的上面,让我很纠结,求各路神仙指教
QT连连看,QPainter绘制实现
由QPainter绘制实现,速度很快, 实现了全部基本功能; 现在还 缺少倒计时时间条,还有销毁路径自动消失功能, 哪位大师能指点下就更好了! 先共享出来给大家看看 !!!!!!! 以后还会更新的,谢谢支持
相关热词 c#异步发送kafka c#窗体编号 c# 操作二进制文件 c# 反射 机制 c#线程 窗体失去响应 c#角度转弧度 c# 解析gps数据 c# vs设置 语法版本 c# json含回车 c#多线程demo