1

QVector3D を tableView に、できれば (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 を 1 つのセルのテーブルに表示するにはどうすればよいですか?

4

2 に答える 2

3

私は次のようにします:

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()); 
  }
}
于 2015-05-29T08:45:41.177 に答える
2

バリアントにはQt::DisplayRoleQString が必要ですが、QVector3D を提供しています。QVariant では QVector3D から QString への変換はありません (ドキュメントを参照してください)。

ベクターを自分で文字列表現に変換するか、 a を使用してQVector3D を文字列表現に変換するメソッドQStyledItemDelegateをオーバーライドする必要があります。displayText

NB: QDebug operator<<(QDebug dbg, const QVector3D &vector)QDebug に QVector3D を印刷するための専用ファイルがあるため、デバッグ出力は機能します。

于 2015-05-29T08:52:40.907 に答える