1
我需要顯示一些樹視圖項文本從Ruby渲染出一個QT treeview文本。 在閱讀了一些關於QT文檔和編碼的文章之後,我發現只有在粗體渲染字體的時候渲染出了三振出局。奇怪的treeview行爲:只有粗體刪除文本
所以我想,我哪裏做錯了嗎? 這是實現上述結果的代碼。請注意,因爲我爲每個偶數行項目設置了刪除線。 我在Mandriva Linux上使用Ruby 1.8.7和Qt 4.6.2和qt4ruby 4.4.3-6。
require 'Qt4'
require 'date'
class MyStandardItem < Qt::StandardItem
def initialize(str = nil)
super str
end
def data(role = Qt::UserRole + 1)
return super(role) unless role == Qt::FontRole
ret_val = Qt::Font.new()
#parameters for "fromString":font family, pointSizeF, pixelSize, QFont::StyleHint, QFont::Weight, QFont::Style, underline, strikeOut, fixedPitch, rawMode
ret_val.fromString "sans serif,-1,-1,0,0,0,0,0,0,0"
case role
when Qt::FontRole
ret_val.setStrikeOut(true) if (index.row % 2) == 0
if index.column == 1
ret_val.weight = Qt::Font.Bold
else
ret_val.weight = Qt::Font.Normal
end
return Qt::Variant.fromValue(ret_val)
end
return ret_val
end
end
Qt::Application.new(ARGV) do
treeview = Qt::TreeView.new do
model = Qt::StandardItemModel.new self
head = [MyStandardItem.new "Qt v. #{Qt.version}"]
head << MyStandardItem.new("Ruby v. #{VERSION}")
head << MyStandardItem.new("Qt4Ruby v. 4.4.3-6 (Mandriva)")
model.append_row head
(1..10).each do |i|
col0 = MyStandardItem.new 'some text'
col0.check_state = ((i % 3) == 0)? Qt.Checked : Qt.Unchecked
col0.checkable = true
col0.editable= false
col1 = MyStandardItem.new "line ##{i}"
col2 = MyStandardItem.new((Date.today + i).strftime '%d/%m/%y')
model.append_row [col0, col1, col2]
end
self.model = model
show
end
exec
end
出於好奇,你有沒有用更大的字體(比如說20pt)試過它?也許正常的文本確實有一個刪除,但它太窄而看不到。 – TonyK 2011-04-04 10:36:46
@TonyK 我剛剛嘗試過使用25pt的字體 - 只是確實夠用; - ) - 'ret_val.fromString「sans serif,25,-1,0,0,0,0, 0,0,0「' 導致相同的怪異性:呈現爲Qt :: Font.Bold的文本呈現爲25pt,而呈現爲普通的文本呈現爲默認音調(9pt), [如您所見這裏](http://sites.google.com/site/tuxmal/bug_strikeout_qtreeview2.png)。 – TuxmAL 2011-04-04 16:32:43