【问题标题】:Creating a QModelIndex创建 QModelIndex
【发布时间】:2017-02-27 14:00:44
【问题描述】:

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

【问题讨论】:

    标签: qt qmodelindex


    【解决方案1】:

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

    例子:

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

    【讨论】:

    • 我认为真正的困难来自于刚接触 Qt。我认为您所说的正是我想要并尝试过的;然而,挣扎仍在继续。我已经更新了我的初始帖子以获得更多信息。谢谢!
    • 我改了答案,第一个链接错了对不起,你可以使用QAbstractItemModel::index(不是createIndex,这是受保护的),如果你是新手,你不能只打电话它就像它不是静态的。您需要一个有效的“数据模型”来存储数据并在 上调用 index 方法。我猜你在某处有一个模型,获得QModelIndex 还有什么意义?
    • @MetalWing 我在答案中添加了一个简短的示例,但这取决于您实际使用的模型,我不知道。 :)
    【解决方案2】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多