首页 > 其他分享 >QT:绘图

QT:绘图

时间:2024-01-10 15:11:06浏览次数:29  
标签:lineItem QT scene pen 绘图 rectItem path include

QPainter能够实现绘制二维图形,适合用于绘制复杂度不高的固定图形,并且不能实现图项的选择、编辑、拖放、修改等交互功能
对于需要绘制大量的、需要交互的图形,可以使用Graphics View Item

 

QGraphicsEllipsetItem  椭圆

QGraphicsLineItem     直线

QGraphicsPathItem     路径

QGraphicsPixmapItem   图像

QGraphicsPolygonItem  多边形

QGraphicsRectItem    矩形

QGraphicsSimpleTextItem 简单文本

QGraphicsTextItem    文本浏览

QGraphicsView      坐标系

 

#include <QApplication>
#include <QGraphicsScene>
#include <QGraphicsView>
#include <QGraphicsRectItem>
#include "math.h"

int main(int argc, char* argv[])
{
    QApplication a(argc, argv);
    QGraphicsScene scene;   //定义一个场景,设置背景色为红色
    scene.setBackgroundBrush(Qt::red);

    QPen pen;   //定义一个画笔,设置画笔颜色和宽度
    pen.setColor(QColor(0, 160, 230));
    pen.setWidth(10);

    QGraphicsRectItem* m_rectItem = new QGraphicsRectItem();    //定义一个矩形图元
    m_rectItem->setRect(0, 0, 80, 80);
    m_rectItem->setPen(pen);
    m_rectItem->setBrush(QBrush(QColor(255, 0, 255)));
    m_rectItem->setFlag(QGraphicsRectItem::ItemIsMovable);

    QGraphicsLineItem* m_lineItem = new QGraphicsLineItem();    //定义一个直线图元
    m_lineItem->setLine(QLineF(0, 0, 100, 100));
    m_lineItem->setPen(pen);
    m_lineItem->setFlag(QGraphicsItem::ItemIsMovable);

    QGraphicsPathItem* m_pathItem = new QGraphicsPathItem();    //定义一个路径图元
    QPainterPath path;
    path.moveTo(90, 50);
    for (int i = 1; i < 5; ++i){
        path.lineTo(50+40*cos(0.8*i*M_PI), 50+40*sin(0.8*i*M_PI));
    }
    path.closeSubpath();
    m_pathItem->setPath(path);
    m_pathItem->setPen(pen);
    m_pathItem->setFlag(QGraphicsItem::ItemIsMovable);

    QGraphicsPolygonItem* m_polygonItem = new QGraphicsPolygonItem();   //定义一个多边形图元
    QPolygonF polygon;
    polygon << QPointF(-100.0, -150.0) << QPointF(-120.0, 150.0) << QPointF(320.0, 160.0) << QPointF(220.0, -140.0);
    m_polygonItem->setPolygon(polygon);
    m_polygonItem->setPen(pen);
    m_polygonItem->setFlag(QGraphicsItem::ItemIsMovable);

    scene.addItem(m_rectItem);  //把矩形图元添加到场景
    scene.addItem(m_lineItem);  //把直线图元添加到场景
    scene.addItem(m_pathItem);  //把路径图元添加到场景
    scene.addItem(m_polygonItem);   //把多边形图元添加到场景

    QGraphicsView view(&scene); //定义一个视图,并把场景添加到视图
    view.resize(1024, 768);
    view.show();

    return a.exec();
}

 

标签:lineItem,QT,scene,pen,绘图,rectItem,path,include
From: https://www.cnblogs.com/k5bg/p/17956515

相关文章

  • C++和Qt面试题(精简版)
    C++面试题什么是c++?请简述它的优点和缺点c++是一种面向对象的编程语言,实现了继承、抽象、多态和封装等概念。**优点:**能够开发复杂的应用程序,提供了极大地灵活性,让开发者能够控制资源的使用和可用性,从而最大限度的提高性能。**缺点:**由于C++太过自由,导致指针对内存操作时可能造成内......
  • Qt中QItemEditorFactory的使用
    一般而言QItemEditorFactory是用于替换Qt中已有的数据类型的编辑器控件。因为如果是自定义类型的话,用它也比较复杂,还不如直接自定义一个新的QStyledItemDelegate。尽管如此,本文也给出一个自定义数据类型的例子,用于解释QItemEditorFactory的用法。本例子开发环境是VS2017和Qt5.9。......
  • Qt QProcess进程间调用及交互通信,完整示例
    1.概述使用Qt进行应用程序开发,主要是通过QProcess类用于启动外部程序并与其进行通信.1.1.运行进程要启动进程,需要运行的程序的名称和命令行参数作为参数传递给start()。参数以QStringList形式提供。start()方法原型:voidstart(constQString&program,constQStringList&a......
  • Qt 快速读取大文件最后一行内容
    0.前言有时候根据需求,需要读取文本的最后一行内容。如果是小文本,按照顺序读,然后取最后一行就Ok;但如果是大文本,即使是放到线程里跑,读取到最后一行也会有延迟,比较耗时。1.解决方案查看QFile帮助手册,其有boolseek(qint64pos);意思就是查找设备中的位置。成功时返回true;否......
  • MQTT服务器连接不上的问题
    问题描述环境:阿里云服务器Ubuntu22.04.3LTS,安装mosquitto后,在虚拟机端订阅消息出现报错(以前用阿里云Ubuntu20.04LTS的服务器装上就能用),以下服务器ip是我乱填的mosquitto_sub-t/iotstuff-h129.25.125.124-p1883Error:Connectionrefused解决办法查看服务器的端口占......
  • Qt读取文件对比:每次获取自定义的长度和使用系统的API,耗时对比
    0.前言在编程过程中,经常遇到文件读写操作,太频繁了。每次也都写的不一样。突发奇想,想测试下几种不同的读取文件的效率。测试以下三种方式读取文件效率:自定义读取文件耗时使用QFile类API读取文件耗时使用QTextStream类API读取文件耗时在测试前,说一下使用到的知识点。1.Qt......
  • Qt生成动态库和使用动态库
    一、动态库的生成第一步.新建项目——库——C++Library——点击选择按钮第二步.填写名称——新建路径——点击下一步按钮第三步:选择Buildsystem:默认的qmake即可——点击下一步按钮第四步:设置库的类型默认的SharedLibrary即可——设置Qt module选择需要的模块——其他也设置为......
  • STM32MP157D-DK1 Qt程序交叉编译与运行测试
    上篇文章介绍了STM32MP157D-DK1开发板Qt镜像的构建,通过在Ubuntu中重新编译带有Qt功能的系统来实现。本篇在上篇的基础上,继续搭建Qt的交叉编译环境,实现Qt程序在Ubuntu中编译,在STM32MP157板子中运行。1编译安装SDK在上篇编译系统镜像的基础上,继续编译和安装SDK。1.1编译SDK执行如下......
  • 安装MySQL数据库及QT添加数据库驱动连接使用
    1.下载官方地址MySQLCommunityserver8.2.0innovation:MySQL社区版的服务器软件,目前最新版本是8.2.0SelectVersion:选择你需要下载的版本号SelectOperatingSystem:选择操作系统,支持安装的操作系统如下Windows(x86,64bit),MSIInstaller(MSI=microsoftinstaller):推荐选择W......
  • C++ Qt开发:Charts与数据库组件联动
    Qt是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍Charts组件与QSql数据库组件的常用方法及灵活运用。在之前的文章中详细介绍了关于QCharts绘图组件......