void QtCadDocGraphicsThum::paintEvent(QPaintEvent *e) { QGraphicsView::paintEvent(e); m_painter.begin(this->viewport()); QPointF ptTemp; //if (m_bIsHeightCenter) //{ ptTemp = QPointF(((sceneRect().width() - m_dW) / 2), ((sceneRect().height() - m_dH) / 2)); //} //else //{ // ptTemp = QPointF(((sceneRect().width() - m_dW) / 2), 0); //} for (auto mark : m_markInfo) { m_painter.setPen(QPen(mark.qclrClr, 1)); QRectF rect = mark.qrectMark; rect.moveTopLeft(ptTemp + mark.qrectMark.topLeft()); m_painter.drawPoint(mapFromScene(rect.center())); } m_painter.setPen(QPen(Qt::green, 1)); m_painter.drawPolygon(mapFromScene(m_rect)); m_painter.end(); }是什么意思
时间: 2024-04-07 11:30:46 浏览: 117
这是一个 QtCadDocGraphicsThum 类的一个成员函数,用于绘制缩略图。这个函数重载了 QGraphicsView 类的 paintEvent() 函数,首先调用了 QGraphicsView::paintEvent(e) 函数,然后在视口上开始绘制。m_painter 是一个 QPainter 对象,用于绘制各种图形元素。ptTemp 是一个 QPointF 类型的对象,用于存储缩略图区域的左上角坐标。在 for 循环中,遍历了 m_markInfo 中的每一个 mark,mark 包含了标记的颜色和位置信息。绘制点时,先设置画笔颜色,然后根据缩略图区域的左上角坐标和标记的位置信息计算出点的坐标,最后使用 QPainter::drawPoint() 函数绘制点。在绘制完所有标记之后,使用 QPainter::drawPolygon() 函数绘制了一个矩形,颜色为绿色。最后调用 QPainter::end() 函数结束绘制。
相关问题
QGraphicsView显示区域可以是异形吗?比如QGraphicsView是一个三角形
QGraphicsView 是 Qt 框架中的一个用于展示和管理 QGraphicsScene 的视图组件。QGraphicsScene 是一个管理大量2D图形项的场景,而 QGraphicsView 是一个视图窗口,它展示了场景的一部分内容,并提供交互功能。通常情况下,QGraphicsView 显示的是矩形区域,这是由视图窗口的形状决定的。
要使 QGraphicsView 显示区域成为异形,比如三角形,需要对视图进行一些额外的处理。这可以通过覆盖绘图事件或者使用裁剪路径(clip path)来实现。具体方法是重写 QGraphicsView 的 `paintEvent` 方法,在这个方法中使用 `QPainter` 来绘制需要的形状,并通过 `QPainter::setClipPath` 或 `QPainter::setClipRegion` 方法来设置裁剪路径,使得图形项只在特定形状内部绘制和显示。
这里是一个基本的示例代码框架:
```cpp
void CustomGraphicsView::paintEvent(QPaintEvent *event) {
QPainter painter(viewport());
// 设置裁剪区域为三角形
QPolygonF trianglePolygon;
trianglePolygon << QPointF(0, 0) << QPointF(width(), 0) << QPointF(width() / 2, height());
QPainterPath trianglePath;
trianglePath.addPolygon(trianglePolygon);
painter.setClipPath(trianglePath);
// 继续正常绘图操作
QGraphicsView::paintEvent(event);
}
```
这段代码将视图裁剪为一个三角形区域,其中 `width()` 和 `height()` 分别是视图的宽度和高度。你需要根据实际需求调整三角形的顶点坐标。
请注意,当你设置了裁剪路径后,QGraphicsView 内部的事件(如鼠标点击事件)也会根据裁剪路径被限制。因此,在处理图形项的交互时,可能需要额外的逻辑来确保正确处理异形裁剪区域内的事件。
QGraphicsView根据中心点绘制交叉C++
可以通过重写`QGraphicsView`的`paintEvent()`函数来实现绘制交叉线的效果,具体步骤如下:
1. 在`QGraphicsView`的构造函数中,设置背景颜色和滚动条的策略:
```cpp
MyGraphicsView::MyGraphicsView(QWidget* parent) : QGraphicsView(parent)
{
setBackgroundBrush(QBrush(Qt::gray));
setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
}
```
2. 重写`paintEvent()`函数,在其中绘制交叉线:
```cpp
void MyGraphicsView::paintEvent(QPaintEvent* event)
{
// 调用基类的paintEvent()函数
QGraphicsView::paintEvent(event);
// 获取视图可见区域的矩形
QRectF rect = mapToScene(viewport()->rect()).boundingRect();
// 创建画笔并设置属性
QPen pen(Qt::black);
pen.setWidth(2);
// 绘制横线
QPainter painter(viewport());
painter.setPen(pen);
painter.drawLine(rect.left(), rect.center().y(), rect.right(), rect.center().y());
// 绘制竖线
painter.drawLine(rect.center().x(), rect.top(), rect.center().x(), rect.bottom());
}
```
这样就可以在`QGraphicsView`中心点绘制交叉线了。
阅读全文