Как проверить положение wheelEvent в тексте QGraphicsTextItem?
У меня есть QGraphicsTextItem
подкласс, который принимает события мыши (т.е. реализует wheelEvent()
метод.
Как я могу проверить, в какой позиции в тексте произошло событие колеса? Я хотел бы получить письмо, на которое указал указатель мыши, когда произошло событие колеса.
Кстати: одним из возможных решений является создание серии QGraphicsTextItem
объекты - по одному на каждую букву. Таким образом, каждое письмо может принимать свои собственные события, но я теряю всю сложность в кернинге и прочей верстке.
1 ответ
Чтобы получить положение мыши, вы можете использовать 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) самостоятельно, так что у вас будет больше контроля над позицией текста в системе координат элемента.