0

QGraphicsTextItemマウスイベントを受け入れる(つまり、メソッドを実装する)サブクラスがありますwheelEvent()

ホイールイベントが発生したテキスト内のどの位置を確認するにはどうすればよいですか?ホイールイベントが発生したときにマウスポインタが指し示した文字を取得したいと思います。

ところで:1つの可能な解決策は、一連のQGraphicsTextItemオブジェクトを作成することです-文字ごとに1つ。このようにして、各文字はそれ自体のイベントを受け入れることができますが、私はすべてのカーニングやその他の植字の洗練度を失います。

4

1 に答える 1

1

マウスの位置を取得するには、QWheelEvent::posを使用できます。

アイテム内の特定のQPointFでレターを取得するためのAPIが表示されません。ただし、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)を行うカスタムテキストアイテムを試してみてください。これにより、アイテムの座標系でのテキストの配置をより細かく制御できます。

于 2011-01-09T18:09:49.117 に答える