我想在tableView中显示QVector3D,最好是这样的:(x,y,z)。我已经子类化了QAbstractTableModel类,并实现了QAbstractTableModelSublass::data函数:
QVariant data(const QModelIndex &index, int role= Qt::DisplayRole) const override
{
...
if(role == Qt::DisplayRole)
{ /* decide in which column and row to display the data*/
QVector3D p(1.,2.,3.); return QVariant(p);
}
}
然而,QVector3D应该显示的目标单元格是空的。我非常肯定正确的QVariant实例被构造了,因为我能够像这样打印值:
QVariant v = QVariant(p);
qDebug()<<v.value<QVector3D>();
我错过了什么?我应该如何在一个单元格中显示QVector3D表?
我会这样做:
QVariant data(const QModelIndex &index, int role= Qt::DisplayRole) const
{
...
if(role == Qt::DisplayRole)
{ /* decide in which column and row to display the data*/
QVector3D p(1.,2.,3.);
return QString("(%1, %2, %3)").arg(p.x()).arg(p.y()).arg(p.z());
}
}
Qt::DisplayRole
在变体中需要QString,但您提供的是QVector3D。在QVariant中没有从QVector3D到QString的转换(参见文档)。
你应该自己将Vector转换为字符串表示,或者使用QStyledItemDelegate
来覆盖displayText
方法将QVector3D转换为字符串表示。
注意:你的调试输出工作,因为有一个专用的QDebug operator<<(QDebug dbg, const QVector3D &vector)
打印QVector3D在QDebug