Как всегда расширять элементы в QTreeView? - PullRequest
0 голосов
/ 28 февраля 2019

Я создаю завершитель самостоятельно, используя 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);
}

Структура моих данных для древовидной модели здесь - parent-child.С помощью описанного выше конструктора, после того, как я поместил свои данные в модель, дети скрылись, и были видны только родители.Чтобы увидеть все предметы (дети), я должен использовать m_view->expandAll() после Я помещаю данные в модель.Есть ли способ сделать это в конструкторе, поэтому каждый раз, когда я помещаю данные в модель (какими бы ни были мои данные), все элементы (родители и дети) автоматически раскрываются?

1 Ответ

0 голосов
/ 28 февраля 2019

Лучше всего подключиться к сигналу 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);
            }
        });
...