我需要在QTableView的项目上绘制一个图标。
我现在得到的是以下内容(每个大矩形都是一个项目):
在方法
中使用以下代码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中对齐文本,但我无法对齐项目中的图标。 简而言之,我需要在表格视图项的左上角绘制这个图标,但我不知道该怎么做。它始终垂直对齐。
任何帮助都将不胜感激。
答案 0 :(得分:1)
您可以调查更改Qt::TextAlignmentRole
是否有所作为,但我的猜测是赢了。解决此问题的常用方法是实现自定义委托,即子类QStyledItemDelegate
,并覆盖paint
方法。我怀疑这可能会提供更好的效果,因为您可以在那里进行自定义绘图,并将Qt::DisplayRole
中的模型数据作为QString
返回。
我在这里做了一些假设,但如果你看一下自定义项目代表的例子,我想你会看到一些非常接近你需要的东西。