【发布时间】:2021-05-16 20:56:15
【问题描述】:
我正在尝试在我的小部件中实现与 cv::namedWindow 中相同的功能。
我们的目标是启用缩放并在原始像素图上直接使用网格和像素颜色值进行叠加。这是示例: сv 图片缩放:
我继承了 QGraphicsView 小部件,将 QGraphicsPixmapItem 添加到 QGraphicsScene 并重新实现了 QWheelEvent,以便现在可以正常放大和缩小。问题始于创建叠加层。
我没有创建一组 QGraphicsLineItems 并将它们添加到场景中以制作网格,而是继承 QGraphicsRectItem 并在其上绘制整个网格。
void QGraphicsOverlayItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
QPen pen(Qt::black);
pen.setWidthF(0.02);
painter->setPen(pen);
painter->setBrush(Qt::BrushStyle::NoBrush);
QVector<QLineF> crossLines = createCrossLines();
painter->drawLines(crossLines);
}
这工作非常快。但是,当我尝试使用 QPainter 绘制文本并将 QFont::pointSizeF() 设置为尽可能小时,它无法正常工作(符号在缩放过程中从小变大,甚至完全消失)。尽管如此,我以这种方式获得的最佳结果如下:
QPainter 的 drawText() 结果:
QFont font(painter->font());
font.setPointSizeF(0.1);
font.setLetterSpacing(QFont::SpacingType::AbsoluteSpacing,0.01);
painter->setFont(font);
painter->drawText(432,195,"123");
最简单的方法是在场景中添加很多 QGraphicsTextItems 并将它们缩放到正确的大小,但是太慢了。
那么问题是如何直接在 QPixmapItem 上订阅 QGraphicsScene 中像素的颜色值?
【问题讨论】:
标签: c++ qt qgraphicsview