Qt 中提供了强大的 2D 绘图系统,可以使用相同的 API 在屏幕和绘图设备上进行绘制,它主要基于QPainter、QPaintDevice 和 QPaintEngine 这三个类。
绘图系统由 QPainter 完成具体的绘制操作,QPainter 类提供了大量高度优化的函数来完成 GUI 编程所需要的大部分绘制工作。它可以绘制一切想要的图形,从最简单的一条直线到其他任何复杂的图形,例如:点、线、矩形、弧形、饼状图、多边形、贝塞尔弧线等。此外,QPainter 也支持一些高级特性,例如反走样(针对文字和图形边缘)、像素混合、渐变填充和矢量路径等,QPainter 也支持线性变换,例如平移、旋转、缩放。
QPainter 可以在继承自 QPaintDevice 类的任何对象上进行绘制操作。QPainter 也可以与 QPrinter 一起使用来打印文件和创建 PDF 文档。这意味着通常可以用相同的代码在屏幕上显示数据,也可以生成打印形式的报告。
QPainter 一般在部件的绘图事件 paintEvent() 中进行绘制,首先创建 QPainter 对象,然后进行图形的绘制,最后记得销毁 QPainter 对象。当窗口程序需要升级或者重新绘制时,调用此成员函数。使用 repaint()和 update() 后,调用函数 paintEvent()。
注意:paintEvent函数系统会自动调用,开发者不需要手动显示调用
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