2015-09-02 2 views
1

Мой 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()); 

ответ

2

Это ожидаемое поведение. Если вы посмотрите на source code, вы увидите, что это добавляет половину пикселя в каждом направлении, когда 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); 
} 
+0

спасибо ... Интересно, почему это ... должно быть, чтобы рисовать прямоугольника выбора – Thalia

+0

Это было бы моим предположением. – thuga

 Смежные вопросы

  • Нет связанных вопросов^_^