QTableView:将项目的图标对齐到左上角

时间:2016-02-28 19:36:24

标签: qt qtableview

我需要在QTableView的项目上绘制一个图标。

我现在得到的是以下内容(每个大矩形都是一个项目):

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;
   }
   ...

我只使用drawRect来查看像素图是如何以及文本在其中的位置。我可以在pixmap中对齐文本,但我无法对齐项目中的图标。 简而言之,我需要在表格视图项的左上角绘制这个图标,但我不知道该怎么做。它始终垂直对齐。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:1)

您可以调查更改Qt::TextAlignmentRole是否有所作为,但我的猜测是赢了。解决此问题的常用方法是实现自定义委托,即子类QStyledItemDelegate,并覆盖paint方法。我怀疑这可能会提供更好的效果,因为您可以在那里进行自定义绘图,并将Qt::DisplayRole中的模型数据作为QString返回。

我在这里做了一些假设,但如果你看一下自定义项目代表的例子,我想你会看到一些非常接近你需要的东西。