2016-02-28 146 views
0

我需要在QTableView的項目上繪製圖標。QTableView:將項目的圖標對齊左上角

什麼,現在我得到的是以下(每個大的矩形中的項目):我只能做的drawRect

enter image description here

與方法

QVariant myClass::data(const QModelIndex& index, int role) const 


    ... 
    case Qt::DecorationRole: 
    { 
     QPixmap pix(m_cellSize, m_cellSize); 
     QPainter painter(&pix); 
     painter.setFont(QFont("Arial", m_cellSize/2)); 
     painter.setPen(Qt::black); 
     painter.drawRect(0, 0, m_cellSize - 1, m_cellSize - 1); 
     painter.drawText(QRect(0, 0, m_cellSize, m_cellSize), Qt::AlignTop, QString::number(m_letters[index.row()][index.column()].number)); 
     QIcon icon(pix); 
     return icon; 
    } 
    ... 

下面的代碼看看像素圖是如何以及文本在裏面。我可以對齊像素圖中的文本,但我無法對齊項目內的圖標。 簡而言之,我需要在表格視圖項目的左上角繪製此圖標,但我不知道如何去做。它始終垂直對齊。

任何幫助,將不勝感激。

回答

1

您可以調查改變Qt::TextAlignmentRole是否有所作爲,但我的猜測是不會的。解決此問題的常用方法是實施自定義委託,即子類QStyledItemDelegate,並覆蓋paint方法。我懷疑這也可能會提供更好的性能,因爲您可以在那裏進行自定義繪圖,並將Qt::DisplayRole中的模型數據返回爲QString

我在這裏做了一些假設,但如果你看看自定義項目代表的例子,我想你會看到一些非常接近你需要的東西。

+0

是的,我已經開始與一個代表。如果我成功了(現在沒有那麼多時間),我接受你的答案。謝謝。 – marco

+0

好吧,代表是絕對要走的路,因爲我需要繪製比對齊的圖標更多的圖標。我很快就嘗試了,它正在工作。非常感謝。 – marco

+0

很高興它爲你工作 - 代表不是完全簡單,但只要你需要做複雜的繪圖,它是最好的選擇。 –