Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Qt и кроссплатформенное программирование С/С++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.04.2011, 18:04   #1
Lunex.08
Форумчанин
 
Аватар для Lunex.08
 
Регистрация: 25.02.2009
Сообщений: 145
По умолчанию Размеры окна и QGraphicsScene, Qt.

Добрый день.
Проблема в следующем:
когда я создаю свой класс, наследуемый от QGraphicsView и устанавливаю размеры сцены и окна одинаковыми, появляются полосы прокрутки. И хоть я полосы убираю, прокрутка все равно совершается(управление итэмами идет с помощью стрелок). Если же размеры окна больше размера сцены, то смещаются система координат сцены, объекты не перемещаются до самой границы окна и еще куча неудобств. Причем если я создаю объект непосредственно QGraphicsView, то всего этого нет.
Как можно сделать так, чтобы размеры сцены и окна были одинаковыми, да к тому же не было прокрутки?
Премного благодарен.
P.S. Делаю тетрис, во вложении только каркас игры.
Вложения
Тип файла: rar Tetris.rar (1.82 Мб, 24 просмотров)
Компьютеры бесподобны: за несколько минут они могут совершить такую грандиозную ошибку, какую не в состоянии сделать множество людей за многие месяцы.
Lunex.08 вне форума Ответить с цитированием
Старый 28.04.2011, 04:16   #2
Obey-Kun
Линуксоид
Участник клуба
 
Аватар для Obey-Kun
 
Регистрация: 31.07.2009
Сообщений: 1,403
По умолчанию

Эм. Ну чтоб прокрутка клавишами не срабатывала, делай keyPressEvent как тебе надо (то есть если кнопка является стрелкой, то не делай QGraphicsView::keyPressEvent).
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su
Obey-Kun вне форума Ответить с цитированием
Старый 28.04.2011, 08:01   #3
Lunex.08
Форумчанин
 
Аватар для Lunex.08
 
Регистрация: 25.02.2009
Сообщений: 145
По умолчанию

Хм...Я не совсем понял. Ты имеешь ввиду делать keyPressEvent для любых кнопок, кроме стрелок? Хм. Можно, но не так удобно, если я правильно понял.
А даже если так: уберу я полосы, не сделаю для стрелок keyPressEvent, все равно по вертикали и горизонтали окно само прокрутиться до максимума. И дальше пойдет смещение.
Все же как избежать прокрутки окна? Я, как вариант, все равно собирался делать рамки, счетчики и прочее. Т.е. мне не обязательно, чтобы размеры сцены и окна были одинаковыми. Но все же интересно, на будущее.
Компьютеры бесподобны: за несколько минут они могут совершить такую грандиозную ошибку, какую не в состоянии сделать множество людей за многие месяцы.
Lunex.08 вне форума Ответить с цитированием
Старый 26.05.2011, 23:30   #4
plorgeplayeri
 
Аватар для plorgeplayeri
 
Регистрация: 26.05.2011
Сообщений: 7
По умолчанию Размеры окна и QGraphicsScene Qt

Добрый день

Необходимо получить размеры зоны рабочего стола без панели задач.

Размер всего экрана можно определить так:
Set objWMIService = GetObject"winmgmts:.rootcimv2"
Set colItems = objWMIService.ExecQuery"Select from Win32_DesktopMonitor"
DeskHight = 0
DeskWidth = 0
For Each objItem in colItems
DeskHight = objItem.ScreenHeight
DeskWidth = objItem.ScreenWidth
Next

ВысотаНужнойЗоны= DeskHight - ВысотаПанелиЗадач

Подскажите как определить либо размер самой зоны, либо как определить высоту панели задач?
plorgeplayeri вне форума Ответить с цитированием
Старый 09.06.2011, 15:53   #5
Impuls1989
Форумчанин
 
Аватар для Impuls1989
 
Регистрация: 16.08.2008
Сообщений: 276
По умолчанию

QGraphicsScene является бесконечным полем. Масштабировать можно только QGraphicsView (собственно для подобного он и создавался). Если ваша картинка выходит за размеры области экрана - автоматом появятся полосы прокрутки, но они появляются у QGraphicsVIew (см. выше). Если все что нарисовано не умещается на экране, а руки чешутся все разместить... - юзайте метод scale.
Искусственный интеллект - фигня по сравнению с естественной глупостью
Impuls1989 вне форума Ответить с цитированием
Старый 10.06.2011, 10:48   #6
Obey-Kun
Линуксоид
Участник клуба
 
Аватар для Obey-Kun
 
Регистрация: 31.07.2009
Сообщений: 1,403
По умолчанию

Не совсем верно насчёт бесконечного поля. Ведь есть QGraphicsScene::sceneRect, размер сцены.

Ну и да, не надо забывать про QGraphicsView::sceneRect, отображаемый размер сцены.
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su
Obey-Kun вне форума Ответить с цитированием
Старый 10.06.2011, 12:07   #7
Impuls1989
Форумчанин
 
Аватар для Impuls1989
 
Регистрация: 16.08.2008
Сообщений: 276
По умолчанию

Цитата:
Сообщение от Obey-Kun Посмотреть сообщение
Не совсем верно насчёт бесконечного поля. Ведь есть QGraphicsScene::sceneRect, размер сцены.

Ну и да, не надо забывать про QGraphicsView::sceneRect, отображаемый размер сцены.
Он возвращает текущий, максимальный размер сцены, т.е. если на сцене ничего не нарисовано - вернет 0х0, если вы нарисуете на сцене прямоугольник 5х5, то он вернет 5x5. Ну и т.д.

Цитата:
This property holds the scene rectangle; the bounding rectangle of the scene.
The scene rectangle defines the extent of the scene. It is primarily used by QGraphicsView to determine the view's default scrollable area, and by QGraphicsScene to manage item indexing.
If unset, or if set to a null QRectF, sceneRect() will return the largest bounding rect of all items on the scene since the scene was created (i.e., a rectangle that grows when items are added to or moved in the scene, but never shrinks).
Искусственный интеллект - фигня по сравнению с естественной глупостью
Impuls1989 вне форума Ответить с цитированием
Старый 11.06.2011, 17:48   #8
Obey-Kun
Линуксоид
Участник клуба
 
Аватар для Obey-Kun
 
Регистрация: 31.07.2009
Сообщений: 1,403
По умолчанию

Неправда. Это ведь property. У которого есть сеттер. А нафига было бы делать сеттер для величины, которая от вас по сути не зависит?

Ты говоришь про это:
Цитата:
If unset, or if set to a null QRectF, sceneRect() will return the largest bounding rect of all items on the scene since the scene was created (i.e., a rectangle that grows when items are added to or moved in the scene, but never shrinks).
Hо ведь тут чётко написано: «if unset». Просто надо дать нужную величину.
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su
Obey-Kun вне форума Ответить с цитированием
Старый 13.06.2011, 09:46   #9
Impuls1989
Форумчанин
 
Аватар для Impuls1989
 
Регистрация: 16.08.2008
Сообщений: 276
По умолчанию

Полагаю что часть этого проперти юзает QGraphicsView, а часть сам QGraphicsScene. Мы его конечно тоже можем изменить, только больших результатов оно не даст. Ну да отображаемая часть конечно измениться, но изображение не обрежется. Так что он, по сути, нужен только для скроллинга изображения.
Код:
    QGraphicsView  *v = new QGraphicsView;
    QGraphicsScene *s = new QGraphicsScene;
    QGraphicsRectItem *r = new QGraphicsRectItem;

    v->setScene(s);
    s->addItem(r);
    v->show();

    r->setRect(0,0,200,200);
    s->setSceneRect(100,100,200,200);
    QMessageBox::information(0,"",QString().setNum(s->sceneRect().x())+";"+QString().setNum(s->sceneRect().y())+";"+
                                  QString().setNum(s->sceneRect().height())+";"+QString().setNum(s->sceneRect().width()));
Поиграйтесь с этим свойством.
Искусственный интеллект - фигня по сравнению с естественной глупостью
Impuls1989 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
QGraphicsScene!!! marselik Qt и кроссплатформенное программирование С/С++ 0 18.11.2010 12:27
QGraphicsScene...? marselik Qt и кроссплатформенное программирование С/С++ 2 08.11.2010 12:45
Изменить размеры окна программы КамТерДал Microsoft Office Excel 6 08.10.2009 14:47
Как обратиться к объектам QGraphicsScene по индексу? jojahti Общие вопросы C/C++ 0 23.08.2009 21:27
Qt : рисование, QGraphicsScene, QGraphicsView Shchigi Помощь студентам 1 03.05.2009 02:11