9

上周我一直在努力创建一个给定行和列的 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,但要使用我指定的行/列创建该索引。

4

2 回答 2

10

我不确定这是您想要的,但是您可以QModelIndex使用该方法QAbstractItemModel::index(row, column)http://doc.qt.io/qt-5/qabstractitemmodel.html#index)创建一个!?另一方面,让你挣扎这么久似乎很简单,也许再解释一下。

例子:

QAbstractTableModel *model = ...;

// then you can do something like
QModelIndex nIndex = model->index(1,2);
int b = nIndex.row();
qInfo() << "b" << b;
于 2017-02-27T14:04:41.873 回答
7

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

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

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

索引本身在创建后是不可变的 - 您不能更改其行、列或父级(除非通过更改其背后的模型使其无效)。

于 2017-02-27T14:49:29.190 回答