Russian Qt Forum
Октябрь 02, 2024, 07:17 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Проблемы с QGraphicsView  (Прочитано 2397 раз)
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 и анимацией! Анимацию я ещё конечно не делал, т.к. не могу понять в чём тут проблема
Записан
santaclaus
Гость
« Ответ #1 : Февраль 12, 2011, 22:50 »

Судя по тому, что Вы прибавляете там совсем не много в 2х случаях, могу предположить, что может быть это из за шрифтов или может быть темы самой ОС.
Сталкивался с подобной проблемой только на совмещении Linux\Windows.
Если на Mandriva все было отлично, то на win xp мое самодельное рисование тоже вылазило за рамки "красивого"

ну в своем случае я это обошел через
Код:
#if defined(Q_WS_X11) 
#if defined(Q_WS_WIN)
.
Попробуйте собрать под другой ОС, посмотрите результат и сделайте вывод что это может быть.
Записан
Makss
Гость
« Ответ #2 : Февраль 14, 2011, 12:27 »

шрифты тут вообще не причём, есть определенные жёсткие параметры, исходя из которых считаю полную высоту сцены, а она зависит только лишь от количество элементов
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.054 секунд. Запросов: 20.