如何在QAbstractItemModel和QTreeView类中找到Subitem?

mos*_*osg 13 qt qt4 qabstractitemmodel

问题:如何在带有方法的QTreeView加载QAbstractItemModel模型中查找子项model->match()

问题:model->match()找不到子项,wtf?!

这是一个例子:

alt text http://www.freeimagehosting.net/uploads/179eee87e3.png

从图中可以看出,我正在尝试Layouts使用以下代码扩展子项:

void Dialog::restoreState(void)
{
    // get list
    QSettings settings("settings.ini", QSettings::IniFormat);
    settings.beginGroup("MainWindow");
    QStringList List = settings.value("ExpandedItems").toStringList();
    settings.endGroup();

    foreach (QString item, List)
    {
        if (item.contains('|'))
            item = item.split('|').last();
        // search `item` text in model
        QModelIndexList Items = model->match(model->index(0, 0), Qt::DisplayRole, QVariant::fromValue(item));
        if (!Items.isEmpty())
        {
            // Information: with this code, expands ONLY first level in QTreeView
            view->setExpanded(Items.first(), true);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

settings.ini文件包含:

[MainWindow]
ExpandedItems=Using Containers, Connection Editing Mode, Form Editing Mode, Form Editing Mode|Layouts
Run Code Online (Sandbox Code Playgroud)

PS:root项目在开始时成功扩展!

mos*_*osg 22

这是解决方案:

QModelIndexList Items = model->match(
            model->index(0, 0),
            Qt::DisplayRole,
            QVariant::fromValue(item),
            2, // look *
            Qt::MatchRecursive); // look *
Run Code Online (Sandbox Code Playgroud)
  • * 没有那个参数,match()函数只搜索1个级别