Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Makss от Февраль 11, 2011, 23:57



Название: Проблемы с QGraphicsView
Отправлено: Makss от Февраль 11, 2011, 23:57
Хотел я тут сделать с помощью 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 и анимацией! Анимацию я ещё конечно не делал, т.к. не могу понять в чём тут проблема


Название: Re: Проблемы с QGraphicsView
Отправлено: santaclaus от Февраль 12, 2011, 22:50
Судя по тому, что Вы прибавляете там совсем не много в 2х случаях, могу предположить, что может быть это из за шрифтов или может быть темы самой ОС.
Сталкивался с подобной проблемой только на совмещении Linux\Windows.
Если на Mandriva все было отлично, то на win xp мое самодельное рисование тоже вылазило за рамки "красивого"

ну в своем случае я это обошел через
Код:
#if defined(Q_WS_X11) 
#if defined(Q_WS_WIN)
.
Попробуйте собрать под другой ОС, посмотрите результат и сделайте вывод что это может быть.


Название: Re: Проблемы с QGraphicsView
Отправлено: Makss от Февраль 14, 2011, 12:27
шрифты тут вообще не причём, есть определенные жёсткие параметры, исходя из которых считаю полную высоту сцены, а она зависит только лишь от количество элементов