Как проверить положение wheelEvent в тексте QGraphicsTextItem? - PullRequest
0 голосов
/ 09 января 2011

У меня есть подкласс QGraphicsTextItem, который принимает события мыши (т. Е. Реализует метод wheelEvent().

Как я могу проверить, в какой позиции в тексте произошло событие колеса? Я хотел бы получить письмо, на которое указывал указатель мыши, когда произошло событие колеса.

Кстати: одно из возможных решений - создать серию QGraphicsTextItem объектов - по одному на каждую букву. Таким образом, каждое письмо может принимать свои собственные события, но я теряю всю сложность в кернинге и прочем наборе текста.

1 Ответ

1 голос
/ 09 января 2011

Чтобы получить положение мыши, вы можете использовать QWheelEvent :: pos.

Я не вижу API, чтобы получить букву для данного QPointF в элементе.вы можете попытаться получить, возможно, достаточно хорошее приближение, используя QFontMetricsF, хотя, делая что-то вроде

 const int wx = wheelEvent->pos().x(); //might have to map to item coordinates
 const qreal leftX = item->boundingRect().left();
 const QFontMetricsF fm( item->font() );
 int pos = 0;
 while ( fm.width( text.left( pos ) - leftX < wx )
      pos++; //could be optimized by something binary-search-like

Если это не сработает, вы можете попробовать с пользовательским текстовым элементом, где вы рисуете (QPainter:: drawText), чтобы вы могли лучше контролировать положение текста в системе координат элемента.

...