2011-04-03 70 views
1

我需要顯示一些樹視圖項文本從Ruby渲染出一個QT treeview文本。 在閱讀了一些關於QT文檔和編碼的文章之後,我發現只有在粗體渲染字體的時候渲染出了三振出局。奇怪的treeview行爲:只有粗體刪除文本

Resulting treeview rendering.

所以我想,我哪裏做錯了嗎? 這是實現上述結果的代碼。請注意,因爲我爲每個偶數行項目設置了刪除線。 我在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 

回答

0

最終我發現了一個竅門來克服這個問題。再次閱讀enum QFont::Weight description後打在我試圖設置的

ret_val.weight = 51 # Qt::Font.Normal value is 50 

代替

ret_val.weight = Qt::Font.Normal 

和神奇的普通文本刪除線出現了!

也許這種奇怪的行爲是由於QT上的錯誤?

+0

出於好奇,你有沒有用更大的字體(比如說20pt)試過它?也許正常的文本確實有一個刪除,但它太窄而看不到。 – TonyK 2011-04-04 10:36:46

+0

@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