Как проверить позицию съемочного стекла в тексте qgraphicstextItem?
-
09-10-2019 - |
Вопрос
у меня есть 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) сами, поэтому у вас больше контроля над позиционированием текста в системе координат элемента.