Как проверить позицию съемочного стекла в тексте qgraphicstextItem?

StackOverflow https://stackoverflow.com/questions/4640544

Вопрос

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

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

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

Это было полезно?

Решение

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

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

 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) сами, поэтому у вас больше контроля над позиционированием текста в системе координат элемента.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top