Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: n4ela от Июнь 27, 2010, 14:51



Название: QGraphicsView появляются скролл бары.
Отправлено: n4ela от Июнь 27, 2010, 14:51
Есть собственный класс унаследованный от QGraphicsView в одном из методов следующий код:
Код
C++ (Qt)
scene = new QGraphicsScene();
setScene(scene);
int mapSize = 15;
setMinimumSize(mapSize * CELLSIZE, mapSize * CELLSIZE);
setMaximumSize(mapSize * CELLSIZE, mapSize * CELLSIZE); //Тут CELLSIZE = 30, устанавливаю размер вивера ровно по размеру карты
/*Дальше рисую клетчатое поле/*
int y = 0;
int x = 0;
for (int i = 0; i < mapSize; ++i)
{
   y += CELLSIZE;
   x += CELLSIZE;
   scene->addLine(0, y, mapSize * CELLSIZE, y);
   scene->addLine(x, 0, x, mapSIze * CELLSIZE);
}
И вот с таким кодом у меня появляются скролл бары с обоих сторон(сверху и снизу).
Уже не знаю что делать setSceneRect задавать пробывал - не на что не влияет, если убрать setMaximumSize, то сначала отрисовывается как надо, а потом если развернуть на весь экран поле остается по середине и появляется пустое место по краям.
Надо что бы поле четко влезало в свое окошко без скролов.
В иделе надо сделать так что бы если поле не влезает в экран то только тогда появлялись скроллы.
Заранее благодарен.


Название: Re: QGraphicsView появляются скролл бары.
Отправлено: lit-uriy от Июнь 27, 2010, 15:25
Если сцена целиком помещается в графическое представление, то линеек прокрутки не будет.
Но сцена ни когда автоматически не уменьшает свой размер, автоматически только увеличивает.
поэтому уменьшай размер сцены до охватывающего прямоугольника.



Название: Re: QGraphicsView появляются скролл бары.
Отправлено: n4ela от Июнь 27, 2010, 18:23
Так а как усеньшить размер самой сцены? Методов setMaximumSize, setMinimumSize у нее нету, есть только setSceneRect. И если задать setSceneRect(0, 0, mapSize * CELLSIZE, mapSize * CELLSIZE) то скролы все равно есть.


Название: Re: QGraphicsView появляются скролл бары.
Отправлено: n4ela от Июнь 27, 2010, 19:39
Проверил, если писать
Код
C++ (Qt)
 
setMinimumSize(mapSize * CELLSIZE, mapSize * CELLSIZE);
setMaximumSize(mapSize * CELLSIZE, mapSize * CELLSIZE);
scene->setSceneRect(0, 0, mapSize * CELLSIZE, mapSize * CELLSIZE);
По идеи так размер сцены равен размеру вивера, но скролы все рано появляются.
Если отключить отображение скролов то сцену все равно можно прокрутить мышкой(совсем чуть чуть)
При отключенных скролах полностью сцену можно отобразить так:
Код
C++ (Qt)
 
setMinimumSize(mapSize * CELLSIZE + 4, mapSize * CELLSIZE + 4);
setMaximumSize(mapSize * CELLSIZE + 4, mapSize * CELLSIZE + 4);
scene->setSceneRect(0, 0, mapSize * CELLSIZE, mapSize * CELLSIZE);
Но это какое то топорное решение.


Название: Re: QGraphicsView появляются скролл бары.
Отправлено: asvil от Июнь 27, 2010, 20:09
Возможно нужно учесть QGraphicsView::frameWidth, т.е.
setMinimumSize(mapSize * CELLSIZE + 2*frameWidth(), mapSize * CELLSIZE + 2*frameWidth());


Название: Re: QGraphicsView появляются скролл бары.
Отправлено: mal от Июнь 28, 2010, 07:36
QGraphicsView::fitInView  вам в помощь. И неважно какие размеры сцены.