为整行设置userData?

时间:2013-01-27 15:12:03

标签: model qt4 qtableview

在QTableView中,我有一些与某些QStandardItem相关联的用户数据,

每行都有一个用户数据(我使用行选择模式)

现在,当用户右键单击同一行上的任何项目时,他们会获得相同的数据。

所以我的问题是,我在每行的第一列设置用户数据,每次我得到一个点击事件,我需要在同一行找到项目,然后是第一列,然后查找关联用户数据。

看起来相当愚蠢,是否可以为整行设置数据?

1 个答案:

答案 0 :(得分:1)

您可以考虑使用带有数据列表的自定义QAbstractTableModel。我目前有一个类似于你的需求的项目,并为我创建了QAbstractTableModel的子类。

在QAbstractTableModel中,创建一个按行返回数据项的方法,如DataClass* getRecord(int row);,并在QTableView行单击事件中,将方法与所选行相关联。

void MyTable::showEditDialog()
{
    MyModel* m = qobject_cast<MyModel*>(model());
    QModelIndexList selected = selectionModel()->selectedIndexes();
    MyDialog dialog(m->getRecord(selected[0].row()), this);
    if (dialog.exec() == QDialog::Accepted)
    {
        m->refresh(selected[0]);
        Q_EMIT contentEdited();
    }
} // end_slot(MyTable::showEditDialog)

检查herehere以获取QAbstractTableModel和模型视图编程的文档。