【发布时间】:2010-07-20 13:59:51
【问题描述】:
问题:如何在QTreeView用model->match()方法加载的QAbstractItemModel模型中找到子项?
问题:model->match() 找不到子项目,wtf?!
示例如下:
从图片中可以看出,我正在尝试使用此代码扩展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);
}
}
}
settings.ini 文件包含的位置:
[MainWindow]
ExpandedItems=Using Containers, Connection Editing Mode, Form Editing Mode, Form Editing Mode|Layouts
PS:根项目在启动时成功扩展!
【问题讨论】:
-
如果您使用自己的项目模型,您可以简单地重新实现匹配方法以满足您的需求(如文档所述)
-
@Kamil Klimek 例如,我买了一辆汽车,如果汽车只有四个轮子,为什么还要安装第五个轮子?另一个问题,如果这种方法真的像文档所说的那样工作......
-
好吧,因为 match 方法没有什么是递归的,我想它不是,因为它是在 QAbstractItemModel 中实现的,所以女巫对任何树(或其他)层次结构一无所知。这就是为什么如果你想让它递归,你必须重新实现 match 方法。
-
哦,根据你的“车”...好吧,最好有第五个(备用)轮子,以防万一你的另一个轮子变平..
标签: qt qt4 qabstractitemmodel