2011-01-09 42 views
0

我有一個QGraphicsTextItem子接受鼠標事件(即實現wheelEvent()方法。如何在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自定義文本項目嘗試),所以您可以更好地控制項目座標系中文本的位置。

+0

聽起來很合理。如果這在實踐中有意義,我會嘗試。 – 2011-01-09 18:11:46