1
A QTreeView在自定義QStyledItemDelegate::paint
方法的幫助下呈現。目的是向節點添加圖形元素,例如,在項目文本週圍繪製(並填充)一個框。樹項目可能有複選框,或者沒有。重新實現QStyledItemDelegate :: paint - 如何獲取子元素的座標?
下面的Ruby代碼實現了目標,除了我無法獲得文本元素的座標。經驗偏移量(x = 29; y = 4)可用作解決方法。方法super
在文本框的頂部繪製文本。
- 我怎樣才能獲得文本元素的座標?
- 這是正確的做法,在所有的,或者我必須使用的drawText和drawControl而不是調用父類油漆方法嗎?在那種情況下,你如何控制子元素的佈局?
(這個問題是不是紅寶石具體的含C++,歡迎答案。)
class ItemDelegate < Qt::StyledItemDelegate
def paint(painter, option, index)
text = index.data.toString
bg_color = Qt::Color.new(Qt::yellow)
fg_color = Qt::Color.new(Qt::black)
offset = Qt::Point.new(29,4)
painter.save
painter.translate(option.rect.topLeft + offset)
recti = Qt::Rect.new(0, 0, option.rect.width, option.rect.height)
rectf = Qt::RectF.new(recti)
margin = 4
bounding = painter.boundingRect(rectf, Qt::AlignLeft, text)
tbox = Qt::RectF.new(Qt::PointF.new(-margin,0), bounding.size)
tbox.width += 2*margin
painter.fillRect(tbox, bg_color)
painter.drawRect(tbox)
painter.restore
super
end
end
編輯:請找self-contained example here in this Gist。