QGraphicsPixmapItem на один пиксель больше, если я устанавливаю выбираемый элемент

Мой QGraphicsPixmapItem должен сообщить правильный размер - его начальный размер должен соответствовать исходному размеру изображения.

Я замечаю что-то странное, если делаю элемент доступным для выбора: указанный размер на один пиксель больше.

Этого следует ожидать?
Будет ли такое поведение одинаковым для всех QGraphicsPixmapItems, которые установлены для выбора?
(И, следовательно, могу ли я переопределить boundingRect(), чтобы каждый раз вычитать 1 из размера, сообщаемого QGraphicsPixmapItem::boundingRect()?)

Простая проверка с любым изображением:

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());

person Thalia    schedule 02.09.2015    source источник


Ответы (1)


Это ожидаемое поведение. Если вы посмотрите на исходный код, вы увидите, что он добавляет полпикселя к каждому направлению, когда установлен флаг 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);
}
person thuga    schedule 03.09.2015
comment
спасибо... Интересно, почему это... должно быть, чтобы разрешить рисование прямоугольника выбора - person Thalia; 03.09.2015
comment
Это было бы и моим предположением. - person thuga; 04.09.2015