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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QGraphicsView появляются скролл бары.  (Прочитано 5093 раз)
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, то сначала отрисовывается как надо, а потом если развернуть на весь экран поле остается по середине и появляется пустое место по краям.
Надо что бы поле четко влезало в свое окошко без скролов.
В иделе надо сделать так что бы если поле не влезает в экран то только тогда появлялись скроллы.
Заранее благодарен.
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #1 : Июнь 27, 2010, 15:25 »

Если сцена целиком помещается в графическое представление, то линеек прокрутки не будет.
Но сцена ни когда автоматически не уменьшает свой размер, автоматически только увеличивает.
поэтому уменьшай размер сцены до охватывающего прямоугольника.

Записан

Юра.
n4ela
Гость
« Ответ #2 : Июнь 27, 2010, 18:23 »

Так а как усеньшить размер самой сцены? Методов setMaximumSize, setMinimumSize у нее нету, есть только setSceneRect. И если задать setSceneRect(0, 0, mapSize * CELLSIZE, mapSize * CELLSIZE) то скролы все равно есть.
Записан
n4ela
Гость
« Ответ #3 : Июнь 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);
Но это какое то топорное решение.
Записан
asvil
Гость
« Ответ #4 : Июнь 27, 2010, 20:09 »

Возможно нужно учесть QGraphicsView::frameWidth, т.е.
setMinimumSize(mapSize * CELLSIZE + 2*frameWidth(), mapSize * CELLSIZE + 2*frameWidth());
Записан
mal
Гость
« Ответ #5 : Июнь 28, 2010, 07:36 »

QGraphicsView::fitInView  вам в помощь. И неважно какие размеры сцены.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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