1 ещё актуально
2,3 реализовал по другому
Появилась ещё парочка вопросов:
4)Как узнать текущий отображаемый кусок сцены(QRect) в координатах сцены?
Нашел только через
у 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 не устраивают (там из-за порядка слоев сетку не видно или вообще все сцену)