QPainter绘图和QChart图表和QCustomplot绘曲线图

一,QPainter绘图

Qt里的所有绘图,比如一个按钮和一个Label的显示,都有绘图系统来执行。绘图系统基于 QPainter、QPaintDevice和QPainEngine类。QPainter是可以直接用来操作绘图的类,而 QPaintDevice和QPainEngine都比QPainter更底层,我们只需要了解一下QPaintDevice和 QPainEngine就行了,用下面一张图来表示它们的关系。

用于显示的类,如Widget/QPixmap/QImage/Qlabel等可视类控件都可以充当绘图区域的“画布”,从 QWidget继承的类都有virtual void paintEvent(QPaintEvent *event)属性。paintEvent()是一个虚函数,它在qwidget.h头文件的protected修饰符下面。paintEvent()事件可以被重写。在绘图事件处理函数中创建QPainter对象,然后使用这个QPainter在绘图设备上绘制

void MainWindow::paintEvent(QPaintEvent *event)
{
    //创建与绘制设备关联的对象QPainter;指定画图的对象,this代表本Widget
    QPainter painter(this);
    //绘制图形,先创建一个画笔,设置颜色等,然后在窗口中心绘制文本"subomb"
    painter.setPen(Qt::red);
    painter.drawText(rect(), Qt::AlignCenter, "subomb"); //绘制文本
}

1,颜色

Qt 中的任何颜色都由支持RGB,HSV和CMYK颜色模型的QColor类表示。通常使用QColor
RGB(R,G,B) 来指定颜色。QColor还支持alpha混合轮廓和填充(指定透明效果),并且该类与平台和设备无关(使用QColormap类将颜色映射到硬件)。QColorConstants命名空间中有20个预定义的QColor对象,包括黑色,白色,原色和辅助色。

// Specify semi-transparent red
painter.setBrush(QColor(255, 0, 0, 127));
painter.drawRect(0, 0, width()/2, height());
// Specify semi-transparent blue
painter.setBrush(QColor(0, 0, 255, 127));
painter.drawRect(0, 0, width(), height()/2);

2,窗口和视口

在使用QPainter进行绘制时,我们使用逻辑坐标指定点,然后将其转换为绘画设备的物理坐标,也就是可以通过窗口和视口来设置组件大小位置。视口是基于QPaintDevice类组件坐标实现,是物理坐标,可以通过setViewport()函数设置;窗口是基于自身的逻辑坐标,不是真实坐标,可以通过setWindow()函数设置。 逻辑坐标到物理坐标的映射由QPainter的world transformation worldTransform()以及QPainter 的viewport()和window()处理。视口表示指定任意矩形的物理标。“窗口”在逻辑坐标中描述相同的矩形。默认情况下,逻辑坐标系和物理坐标系重合,相当于绘制设备的矩形。

3,坐标

 x轴y轴组成的平面坐标系来限定2D绘图,Qt中坐标系由QPainter类控制。

二,Qt Charts绘表

Qt Charts很容易绘制我们常见的曲线图、折线图、柱状图和饼状图等图表。不用自己花精力去了解第三方组件的使用了或者开发第三方组件。Qt的帮助文档里已经有说明Qt Charts主要部件的使用方法。可以点击Ctrl + Shift + T,查询相应类的继承关系。在项目里使用 Qt Charts 模块,需在pro文件添加:QT  +=charts。在头文件处加上:QT_CHARTS_USE_NAMESPACE。或者,在头文件类外加上:using namespace QtCharts; 

三,QCustomplot绘曲线图

1,将qcustomplot.c qcustomplot.h文件导入项目文件夹,在工程文件加入 QT += printsupport

2,在QT 设计师界面,在主窗口加入一个Widget组件,并右键选中,选中 提升为...,添加QCustomPlot类。编译运行,即可出现默认的坐标系。在主函数文件当中,可以实验ui->widget去访问qcustomplot对象

  • 25
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寒听雪落

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值