我自己使用ComboBox和QTreeView(用于投标列表)创建一个完成者。
MyComboBox::MyComboBox( QWidget *p_parent ) : QComboBox( p_parent )
{
setEditable(true);
m_view = new QTreeView();
m_view->expandAll(); // this command does not work!!!
m_view->setItemDelegate( new CompleterDelegate(m_view));
CompleterSourceModel *m_sourceModel = new CompleterSourceModel(this);
CompleterProxyModel *m_proxyModel = new CompleterProxyModel(this);
m_proxyModel->setSourceModel(m_sourceModel);
setView(m_view);
setModel(m_proxyModel);
connect(this, &QComboBox::currentTextChanged, this, &MyComboBox::showProposalList);
}
我的树模型数据结构是父子关系。使用上面的构造函数,将数据放入模型后,孩子被隐藏了,只能看到父母。
为了查看所有项(子项),我必须在{strong>之后中使用数据m_view->expandAll()
,将数据放入模型中。有什么方法可以在构造函数中完成,所以每次我将数据放入模型中(无论我的数据是什么)时,所有项(父项和子项)都会自动展开?
答案 0 :(得分:0)
您最好的选择可能是连接到QAbstractItemModel::rowsInserted
信号,以确保在即时基础上扩展项目。因此,在设置视图模型后,立即使用...
connect(m_view->model(), &QAbstractItemModel::rowsInserted,
[this](const QModelIndex &parent, int first, int last)
{
/*
* New rows have been added to parent. If parent isn't
* already expanded then do it now.
*/
if (!m_view->isExpanded(parent)) {
m_view->expand(parent);
}
});