QTableView:将项目的图标对齐到左上角
QTableView: align the icon of the item to top left
我需要在 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 只是为了看看像素图是怎样的以及文本在其中的位置。我可以对齐像素图中的文本,但无法对齐项目内的图标。
简而言之,我需要在 table 视图项的左上角绘制此图标,但我不知道该怎么做。它始终垂直对齐。
如有任何帮助,我们将不胜感激。
您可以调查更改 Qt::TextAlignmentRole
是否会产生影响,但我猜不会。解决这个问题的通常方法是实现自定义委托,即子类 QStyledItemDelegate
,并覆盖 paint
方法。我怀疑这也可能会提供更好的性能,因为您可以在那里进行自定义绘图,并且 return 您将 Qt::DisplayRole
中的数据建模为 QString
。
我在此做了一些假设,但如果您查看自定义项目委托的示例,我认为您会看到非常接近您需要的内容。
我需要在 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 只是为了看看像素图是怎样的以及文本在其中的位置。我可以对齐像素图中的文本,但无法对齐项目内的图标。 简而言之,我需要在 table 视图项的左上角绘制此图标,但我不知道该怎么做。它始终垂直对齐。
如有任何帮助,我们将不胜感激。
您可以调查更改 Qt::TextAlignmentRole
是否会产生影响,但我猜不会。解决这个问题的通常方法是实现自定义委托,即子类 QStyledItemDelegate
,并覆盖 paint
方法。我怀疑这也可能会提供更好的性能,因为您可以在那里进行自定义绘图,并且 return 您将 Qt::DisplayRole
中的数据建模为 QString
。
我在此做了一些假设,但如果您查看自定义项目委托的示例,我认为您会看到非常接近您需要的内容。