Russian Qt Forum

Qt => Общие вопросы => Тема начата: tankist от Июнь 09, 2014, 22:07



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


Название: Re: Как "обуздать" размер QGraphicsView
Отправлено: Fregloin от Июнь 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();
}



Название: Re: Как "обуздать" размер QGraphicsView
Отправлено: Hrundel от Июнь 10, 2014, 12:15
Для коррекции размера рисунка

Код
C++ (Qt)
void QGraphicsView::scale ( qreal sx, qreal sy )
Scales the current view transformation by (sx, sy).


Название: Re: Как "обуздать" размер QGraphicsView
Отправлено: tankist от Июнь 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 )
Увы, данный метод я опробовал одним из первых и отказался от него, потому что при масштабировании рисунка он искажается (получается разная толщина линий), как будто масштабируется не векторная картинка, а растровая.


Название: Re: Как "обуздать" размер QGraphicsView
Отправлено: Fregloin от Июнь 18, 2014, 19:39
если нет скроллбаров попробуйте задать свои


Название: Re: Как "обуздать" размер QGraphicsView
Отправлено: tankist от Июнь 19, 2014, 20:27
если нет скроллбаров попробуйте задать свои
Извиняюсь, не понял. Какие такие свои? Мне как бы нужен именно тот, который отображается, сам я ничего создавать не намерен, даже, скорее, наоборот, намерен убрать.