Qt QGraphicsScene中显示网格
Qt 显示 网格
2023-09-11 14:19:33 时间
QGraphicsLineItem
直接添加 QGraphicsLineItem 类型的item即可,在scene中拖动或者缩放时候,网格不会变形和模糊。
QPen pen2(QColor(128, 128, 128, 50)); for (float x = 0.5 * MAP_SCALE; x <= GRID_RANGE * MAP_SCALE; x += 0.5 * MAP_SCALE) { QLineF line(x, 0, x, GRID_RANGE * MAP_SCALE); QGraphicsLineItem* tmpVertical = new QGraphicsLineItem(line); tmpVertical->setPen(pen2); gridItermVec.push_back(tmpVertical); if (show_grid_) { addItem(tmpVertical); } } //现在添加水平线 for (float y = 0.5 * MAP_SCALE; y <= GRID_RANGE * MAP_SCALE; y += 0.5 * MAP_SCALE) { QLineF line(0, y, GRID_RANGE * MAP_SCALE, y); QGraphicsLineItem* tmpHorizontal = new QGraphicsLineItem(line); tmpHorizontal->setPen(pen2); gridItermVec.push_back(tmpHorizontal); if (show_grid_) { addItem(tmpHorizontal); } }
显示效果如下
QPixmap
1. QGraphicsScene继承类中的构造函数
2.重写 类的虚函数 void drawBackground(QPainter *painter, const QRectF &rect);
QPolygonF myPolygon1; myPolygon1 << QPointF(0, 10) << QPointF(20, 10); QPolygonF myPolygon2; myPolygon2 << QPointF(10, 0) << QPointF(10, 20); QPixmap pixmap(20, 20); pixmap.fill(Qt::transparent); QPainter painter(&pixmap); QVector<qreal> dashes;//line style--虚线 qreal space = 2; dashes << 2 << space << 2 << space; QPen pen(Qt::lightGray, 1); pen.setDashPattern(dashes); pen.setWidth(1); painter.setPen(pen); painter.translate(0, 0); painter.drawPolyline(myPolygon1); painter.drawPolyline(myPolygon2); this->setBackgroundBrush(pixmap);*/
或者如下代码
QPolygonF mypolygon1, mypolygon2; mypolygon1 << QPointF(0, 5) << QPointF(10, 5); mypolygon2 << QPointF(5, 0) << QPointF(5, 10); QPixmap pix(10, 10); pix.fill(Qt::transparent); QPainter painter(&pix); QVector <qreal> dashes; dashes << 2 << 2 << 2 << 2; QPen pen(Qt::darkCyan, 0.2); pen.setDashPattern(dashes); painter.setPen(pen); painter.translate(0, 0); painter.drawPolyline(mypolygon1); painter.drawPolyline(mypolygon2); this->setBackgroundBrush(pix);
二者没有本质区别都是用Qpixmap 作为背景实现的栅格,但是在 QGraphicsScene 中拖动鼠标时候会造成重影,目前不知道怎么消除。
相关文章
- qt中的进程优先级及应用内存大小设置方法,VS和Qt工程中申请超过2G的内存的方法
- QT中操作Txt文件(Qt中QString与QByteArray互相转化方法)
- Qt对话框的事件循环分析(子线程中不能创建UI窗体分析)
- 【QT】Qt::UserRole的作用
- 【QT】对于Qt MSVC 2017无法编译的问题解决
- 【QT】Qt多版本交叉编译所遇到的问题以及如何解决(重在思路过程)
- QT工具——qt for vs
- Qt编写推流综合应用示例(文件推流/桌面推流/本地摄像头/网络摄像头/转发推流/视频分发)
- Qt音视频开发29-ffmpeg中x264/x265编码库支持
- Qt音视频开发24-视频显示QOpenGLWidget方式(占用GPU)
- Qt编写视频监控显示安卓版
- Qt开发经验小技巧241-245
- Qt开发经验小技巧231-235
- Qt开源作品43-超级图形字体
- qt for webassembly环境搭建图文教程
- Qt开源作品8-通用控件移动
- Qt编写安防视频监控系统16-设备播放
- Qt编写气体安全管理系统26-组态设计
- qt widget设置Qt::FramelessWindowHint和Qt::WA_TranslucentBackground, 会出现一个bug: 在最小化后还原时界面停止刷新(Qt5.1解决了这个问题。但实际Qt5.7还有这个问题)
- Qt之QPushButton
- Qt之显示网络图片
- 报错 qt.qpa.plugin: Could not load the Qt platform plugin “xcb“ in ““ even though it was found
- Qt error:QtThese QT version are inaccessible
- VS2010使用静态编译的qt库(Qt 5)
- QT中文乱码与国际化支持
- qt.qpa.plugin: Could not find the Qt platform plugin "windows" in ""