Хотел я тут сделать с помощью QGraphicsView что-то наподобие списка элементов, как в QListWidget, но более графически и с анимацией, вроде как бы всё нормально, работает и т.д. кроме одного. Есть вот такой код
void QFormularNavigationWidget::updateScroll() {
//Функция пересчёта высоты сцены
int count = items.count();
int h = (count * FRM_ITEM_HEIGHT) + (count * 3) + 3;
if(h < viewport()->height()) h = viewport()->height();
setSceneRect(0, 0, viewport()->width(), h);
}
void QFormularNavigationWidget::resizeEvent(QResizeEvent *event) {
//Располагаем элементы один за другим
updateScroll();
const int count = items.count();
for(int i = 0; i < count; i++) {
QFormularItem *item = items.at(i);
QPointF p = mapToScene(3, 0);
p.setY((FRM_ITEM_HEIGHT + 3) * i + 3);
item->setPos(p);
item->setSize(QSizeF(viewport()->width() - 6, FRM_ITEM_HEIGHT));
}
}
этот код был проверин на разных версиях Qt а также в разных версиях Linux, по крайней мере проверял в Suse 11.1 и Suse 11.3, не понимаю почему при одной и той же версии Qt но в разных Suse, результат разный. А результат тот что в Suse 11.1 после последнего элемента нету лишнего рассояния до конца видгета, а в Suse 11.3 это расстояние есть, версия Qt 4.6.3
если некоторые строки в фунциях заменить
Это
int h = (count * FRM_ITEM_HEIGHT) + (count * 3) + 3;
на это
int h = (count * FRM_ITEM_HEIGHT) + (count * 3);
и это
p.setY((FRM_ITEM_HEIGHT + 3) * i + 3);
на это
p.setY((FRM_ITEM_HEIGHT + 4) * i + 3);
то конечно ясное дело что в 11.3 всё будет точно и ровно а вот в 11.1 наборот не будет влезать в сцену, я уже неделю пытаюсь понять в чём проблема, и уж даже незнаю куда копать! Я уж начинаю думать всё сделать через QAbstractScrollArea и видгеты, и не заморачиваться с QGraphicsView и анимацией! Анимацию я ещё конечно не делал, т.к. не могу понять в чём тут проблема