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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Вопросы по QGraphicsScene\View  (Прочитано 3249 раз)
Nidxogg
Гость
« : Август 28, 2013, 21:47 »

Подскажите, возможно ли как-то сделать следующее:
1)Скрыть часть сцены (Требуется иногда убирать центральную часть)
2)Поделить сцену на 2 части и сделать одну неподвижной.(Есть шапка графика и график. При прокрутке через вертикальный-скроллбар шапка естественно "уезжает" и её не видно, а требуется чтобы было видно всегда. Пока решил только добавлением 2 qgraphicsview каждый со своей сценой, но выглядит плохо)
3)При использовании функции scale только по оси Х запретить itemу растягиваться.(Текст плывет)
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #1 : Август 29, 2013, 07:19 »

1)Скрыть часть сцены (Требуется иногда убирать центральную часть)
Создать в этом месте отдельный элемент и уже в нем создавать элементы этой центральной части. 

2)Поделить сцену на 2 части и сделать одну неподвижной.(Есть шапка графика и график. При прокрутке через вертикальный-скроллбар шапка естественно "уезжает" и её не видно, а требуется чтобы было видно всегда. Пока решил только добавлением 2 qgraphicsview каждый со своей сценой, но выглядит плохо)
Правильное решение, только почему выглядит плохо?
« Последнее редактирование: Август 29, 2013, 07:56 от GreatSnake » Записан

Qt 5.11/4.8.7 (X11/Win)
Nidxogg
Гость
« Ответ #2 : Август 29, 2013, 18:21 »

Цитировать
Создать в этом месте отдельный элемент и уже в нем создавать элементы этой центральной части.  
Имеется ввиду какой-нибудь QRect, в который врисовывать остальные элементы?
Просто элементы на сцене могут принадлежать сразу разным областям и скрытие их должно "обрезать".


Цитировать
Правильное решение, только почему выглядит плохо?
У верхнего view скрыты все скроллбары. У нижнего необходимы оба.
В итоге воспринимается не как полноценный график.
Записан
Nidxogg
Гость
« Ответ #3 : Сентябрь 04, 2013, 21:59 »

1 ещё актуально
2,3 реализовал по другому

Появилась ещё парочка вопросов:

4)Как узнать текущий отображаемый кусок сцены(QRect) в координатах сцены?
Нашел только через
Код:
viewport()->rect() 
у view, но не знаю как преобразовать это в координаты сцены.

5)В методах mousePressEvent и mouseReleaseEvent класса, унаследованного от QGraphicsScene устанавливаю курсор
(view - указатель на виджет QGraphicsView)
При нажатии клавиши действительно устанавливается нужный тип курсора(2 для Qt::CrossCursor)
При отжатии ставится дефолт.

Проблема в том, что после рандомного числа нажатий\отжатий курсор при нажатии отображается как дефолтный и никак не реагирует на setCursor;
Иногда данная проблема возникает сразу, при первом нажатии.
P.S В классе item-a переопределен hoverMoveEvent, который изменяет курсор на границе item-а через setCursor - работает нормально всегда
Код:
void MainScene::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
    if(itemAt(event->scenePos())==0)//Отсутствует элемент на сцене
        return;

    if(itemAt(event->scenePos())->type()==OperItem::Type)
    {
        if(event->button()==Qt::RightButton)
            this->view->setCursor(Qt::CrossCursor);
    }
}
void MainScene::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
{
    if((event->button()==Qt::RightButton))
    {
            this->view->unsetCursor();//Оба варианта пробовал
//            this->view->setCursor(QCursor(Qt::ArrowCursor));
    }
}

6)Для ускорения работы сделал прорисовку сетки графика переопределил метод в классе сцены
Код:
drawBackground(QPainter *painter, const QRectF &rect)
Все нормально.
Но потребовалось отрисовать фон. Сейчас делаю так:
Код:
painter->fillRect(rect,brush);
Насколько это правильно и есть ли другие варианты? SetBackgroundBrush\Foreground во view не устраивают (там из-за порядка слоев сетку не видно или вообще все сцену)
« Последнее редактирование: Сентябрь 04, 2013, 22:11 от Nidxogg » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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