如果我将项目设置为可选择的,QGraphicsPixmapItem就会大一个像素



我的QGraphicsPixmapItem必须报告一个正确的大小-它的初始大小应该匹配原始图像的大小。

我注意到一些奇怪的事情,如果我把项目设置为可选择的:报告的大小是一个像素大。

这是意料之中的吗?
对于所有设置为可选的QGraphicsPixmapItems,此行为是否一致?
(因此,我是否可以重写boundingRect(),以便每次从QGraphicsPixmapItem::boundingRect()报告的大小中减去1 ?)

简单检查,任意图片:

QGraphicsPixmapItem p;
p.setFlags(QGraphicsItem::ItemIsSelectable);
QString fileName = QFileDialog::getOpenFileName(0, QObject::tr("Open Image File"),
                 QString(), QObject::tr(
                 "Png files (*.png);;Jpeg files (*.jpg *.jpeg);;Bitmap files (*.bmp)"));
QPixmap pixmap(fileName);
qDebug("%d %d", pixmap.size().width(), pixmap.size().height());
p.setPixmap(pixmap);
qDebug("%f %f", p.boundingRect().width(), p.boundingRect().height());

这是预期的行为。如果您查看源代码,您将看到当设置了ItemIsSelectable标志时,它向每个方向添加了半个像素:

if (d->flags & ItemIsSelectable) {
    qreal pw = 1.0;
    return QRectF(d->offset, d->pixmap.size()).adjusted(-pw/2, -pw/2, pw/2, pw/2);
}

相关内容

最新更新