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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как "обуздать" размер QGraphicsView  (Прочитано 5024 раз)
tankist
Гость
« : Июнь 09, 2014, 22:07 »

Здравствуйте. Использую в своем проекта для вывода графической информации компонент QGraphicsView. В связи с тем, что окно может масштабироваться, сделана обработка события resizeEvent основного окна, по которой графическая сцена в QGraphicsView пересчитывается. Когда окно увелчивает размер, все выглядит замечательно - холст автоматически увеличивается и рисунок полностью влазит в окно. Но когда размер окна уменьшается, размер холста остается таким же огромным, как он и был, а рисунок просто рисуется в центре. Из-за этого в окне появляется абсолютно ненужная полоса прокрутки. отцентрировать рисунок при уменьшении удалось с помощью метода centerOn, таким образом рисунок по прежнему занимает все окно, но как избавиться от "разросшегося" холста (убрать полосу прокрутки)?
Записан
Fregloin
Супер
******
Offline Offline

Сообщений: 1025


Просмотр профиля
« Ответ #1 : Июнь 10, 2014, 12:03 »

убрать полосу прокрутки можно просто задав соответствующее значение для vertical/horizontalScrollBar.

Код:
void QExGraphicsView::showScrollBars()
{
    QWidgetList scrollBars = scrollBarWidgets(Qt::AlignLeft|Qt::AlignRight|Qt::AlignBottom|Qt::AlignTop);
    foreach(QWidget * scrollbar, scrollBars)
        scrollbar->show();
}

void QExGraphicsView::hideScrollBars()
{
    QWidgetList scrollBars = scrollBarWidgets(Qt::AlignLeft|Qt::AlignRight|Qt::AlignBottom|Qt::AlignTop);
    foreach(QWidget * scrollbar, scrollBars)
        scrollbar->hide();
}

Записан
Hrundel
Гость
« Ответ #2 : Июнь 10, 2014, 12:15 »

Для коррекции размера рисунка

Код
C++ (Qt)
void QGraphicsView::scale ( qreal sx, qreal sy )
Scales the current view transformation by (sx, sy).
Записан
tankist
Гость
« Ответ #3 : Июнь 14, 2014, 15:55 »

убрать полосу прокрутки можно просто задав соответствующее значение для vertical/horizontalScrollBar.

Сделал функцию:

Код:
void MSatelliteGraph::hideScrollBars()
{
QWidgetList scrollBars = this->scrollBarWidgets(Qt::AlignLeft|Qt::AlignRight|Qt::AlignBottom|Qt::AlignTop);
foreach(QWidget * scrollbar, scrollBars)
{
scrollbar->hide();
}
}
Вызывается при масштабировании. При уменьшении окна в нее заходит, но не находит ни одного объекта scrollBarWidgets (список scrollBars пуст). Полоса прокрутки в окне виджета присутствует.

Для коррекции размера рисунка

Код
C++ (Qt)
void QGraphicsView::scale ( qreal sx, qreal sy )
Увы, данный метод я опробовал одним из первых и отказался от него, потому что при масштабировании рисунка он искажается (получается разная толщина линий), как будто масштабируется не векторная картинка, а растровая.
Записан
Fregloin
Супер
******
Offline Offline

Сообщений: 1025


Просмотр профиля
« Ответ #4 : Июнь 18, 2014, 19:39 »

если нет скроллбаров попробуйте задать свои
Записан
tankist
Гость
« Ответ #5 : Июнь 19, 2014, 20:27 »

если нет скроллбаров попробуйте задать свои
Извиняюсь, не понял. Какие такие свои? Мне как бы нужен именно тот, который отображается, сам я ничего создавать не намерен, даже, скорее, наоборот, намерен убрать.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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