Qt 绘制二维图形

                                  Qt 绘制二维图形

前言

Qt 中提供了强大的 2D 绘图系统,可以使用相同的 API 在屏幕和绘图设备上进行绘制,它主要基于QPainter、QPaintDevice 和 QPaintEngine 这三个类。

  • QPainter 用于执行绘图操作,其提供的 API 在 GUI 或 QImage、QOpenGLPaintDevice、QWidget 和QPaintDevice 显示图形(线、形状、渐变等)、文本和图像。
  • QPaintDevice 不直接绘制物理显示画面,而利用逻辑界面的中间媒介。例如,绘制矩形图形时,为了将对象绘制到 QWidget、QGLPixelBuffer、QImage、QPixmap、QPicture 等多种界面中间,必须使用 QPaintDevice。
  • QPaintEngine 提供了一些接口,可用于 QPainter 在不同的设备上进行绘制。

绘图系统由 QPainter 完成具体的绘制操作,QPainter 类提供了大量高度优化的函数来完成 GUI 编程所需要的大部分绘制工作。它可以绘制一切想要的图形,从最简单的一条直线到其他任何复杂的图形,例如:点、线、矩形、弧形、饼状图、多边形、贝塞尔弧线等。此外,QPainter 也支持一些高级特性,例如反走样(针对文字和图形边缘)、像素混合、渐变填充和矢量路径等,QPainter 也支持线性变换,例如平移、旋转、缩放。

QPainter 可以在继承自 QPaintDevice 类的任何对象上进行绘制操作。QPainter 也可以与 QPrinter 一起使用来打印文件和创建 PDF 文档。这意味着通常可以用相同的代码在屏幕上显示数据,也可以生成打印形式的报告。

QPainter 一般在部件的绘图事件 paintEvent() 中进行绘制,首先创建 QPainter 对象,然后进行图形的绘制,最后记得销毁 QPainter 对象。当窗口程序需要升级或者重新绘制时,调用此成员函数。使用 repaint()和 update() 后,调用函数 paintEvent()。

注意:paintEvent函数系统会自动调用,开发者不需要手动显示调用

 

1.  绘制线段

void MonitorTopologyForm::paintEvent(QPaintEvent *event)
{
    Q_UNUSED(event);

    QPainter painter(this);
    // 反走样
    painter.setRenderHint(QPainter::Antialiasing, true);
    // 设置画笔颜色
    painter.setPen(QColor(57, 175, 213));
    // 绘制直线 IF1
    //  painter.drawLine(QPointF(440, 380), QPointF(width() / 8, height() / 8));
    painter.drawLine(QPointF(440, 390), QPointF(540,390));
    //绘制直线 IF2
    painter.drawLine(QPointF(440, 470), QPointF(540, 470));
    //绘制直线IF3
    painter.drawLine(QPointF(440, 550), QPointF(540, 550));
    //绘制直线IF4
    painter.drawLine(QPointF(440, 630), QPointF(540, 630));

    //光纤1
    painter.drawLine(QPointF(581, 394), QPointF(690, 394));
    //光纤2
    painter.drawLine(QPointF(581, 662), QPointF(690, 662));

    //万兆网1
    painter.drawLine(QPointF(1052, 420), QPointF(1150, 420));
    //万兆网2
    painter.drawLine(QPointF(1052, 528), QPointF(1150, 528));
    //万兆网3
    painter.drawLine(QPointF(1052, 648), QPointF(1150, 648));

    //万兆网4
    painter.drawLine(QPointF(1205, 520), QPointF(1270, 520));
}

注意:当在QtCreator设计器中,使用QSS设置背景颜色,发现背景颜色会覆盖我们绘制线段的颜色,这时候需要在去掉QSS代码

color: rgb(24, 38, 87);

需要在代码中手动加入背景颜色代码:

MonitorTopologyForm::MonitorTopologyForm(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::MonitorTopologyForm)
{
    ui->setupUi(this);

    QPalette pal(this->palette());

    pal.setColor(QPalette::Background, QColor(10, 52, 100)); //设置背景黑色
    this->setAutoFillBackground(true);
    this->setPalette(pal);
    this->setGeometry(0, 0, 1920, 1080);

界面效果

源码下载

 

 

参考

一去丶二三里

https://blog.csdn.net/liang19890820/article/details/51154216

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Qt绘制二维,可以使用 Qt 的 Graphics View Framework。Graphics View Framework 提供了一个基于场景(Scene)和项目(Item)的二维图形框架。我们可以创建自定义的项目来绘制。 以下是一个简单的示例代码,用于绘制一个简单的地: ```cpp #include <QtWidgets> class MapItem : public QGraphicsItem { public: MapItem(QGraphicsItem *parent = nullptr); QRectF boundingRect() const override; void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override; }; MapItem::MapItem(QGraphicsItem *parent) : QGraphicsItem(parent) { } QRectF MapItem::boundingRect() const { return QRectF(0, 0, 800, 600); } void MapItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) { Q_UNUSED(option); Q_UNUSED(widget); // 绘制背景 painter->setBrush(QColor(230, 230, 230)); painter->drawRect(0, 0, 800, 600); // 绘制道路 painter->setPen(QPen(Qt::black, 3)); painter->drawLine(50, 50, 750, 50); painter->drawLine(50, 150, 750, 150); painter->drawLine(50, 250, 750, 250); painter->drawLine(50, 350, 750, 350); painter->drawLine(50, 450, 750, 450); painter->drawLine(50, 550, 750, 550); // 绘制建筑 painter->setPen(QPen(Qt::black, 1)); painter->setBrush(QColor(255, 255, 200)); painter->drawRect(100, 100, 100, 100); painter->drawRect(300, 400, 200, 100); } int main(int argc, char *argv[]) { QApplication a(argc, argv); QGraphicsScene scene; MapItem *mapItem = new MapItem(); scene.addItem(mapItem); QGraphicsView view(&scene); view.setRenderHint(QPainter::Antialiasing); view.show(); return a.exec(); } ``` 在这个示例代码中,我们创建了一个自定义的 `MapItem` 类,用于绘制。在 `paint` 函数中,我们使用 QPainter 绘制了背景、道路和建筑等元素。在 `main` 函数中,我们创建了一个 QGraphicsScene 对象和一个 QGraphicsView 对象,并将自定义的 `MapItem` 添加到场景中,最后显示视。你可以根据自己的需求,自定义地元素的绘制方式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值