创建QModelIndex

时间:2017-02-27 14:00:45

标签: qt qmodelindex

我花了最后一周努力创建一个给定行和列的QModelIndex。

或者,我愿意在已经存在的QModelIndex中更改row()的值。

任何帮助都将不胜感激。

编辑:

QModelIndex nIndex = QAbstractItemModel::createIndex(1, 2);
int b = nIndex.row();
qInfo() << "b" << b;

失败并显示错误:

cannot call member function ‘QModelIndex QAbstractItemModel::createIndex(int, int, void*) const’ without object
         QModelIndex nIndex = QAbstractItemModel::createIndex(1, 2);
                                                                  ^

目标是:

我有一个功能:

void MyClass::doStuff(QModelIndex index)

在该课程中,我基本上执行以下操作:

if (index.column() != 1)
{
    int a=index.row();
}

所以我的目标是从不同的类调用该函数并将其传递给QModelIndex,但是为了使用我指定的行/列创建该索引。

2 个答案:

答案 0 :(得分:6)

您可以使用index()方法从相应的模型中获取新索引。

如果您已经拥有模型中的索引,并且具有与所需索引相同的父级,那么您可以使用该索引的sibling()方法获取另一个索引:

void MyClass::doStuff(const QModelIndex& index)
{
    // get the value at row zero, same column
    const QModelIndex header = index.sibling(0, index.column());
}

索引本身在创建后是不可变的 - 您无法更改其行,列或父级(除了通过对其背后的模型进行更改而使其无效)。

答案 1 :(得分:3)

我不确定这是您想要的,但您可以使用方法QModelIndexhttp://doc.qt.io/qt-5/qabstractitemmodel.html#index)创建QAbstractItemModel::index(row, column)!另一方面,你似乎很容易与它斗争这么久,或许可以解释一下。

示例:

QAbstractTableModel *model = ...;

// then you can do something like
QModelIndex nIndex = model->index(1,2);
int b = nIndex.row();
qInfo() << "b" << b;