QTreeView против setIndexWidget - PullRequest
       30

QTreeView против setIndexWidget

1 голос
/ 12 марта 2012

Я использую QStandardItemModel с QStandardItem's.

Я не хочу писать свою собственную модель и каких-либо делегатов.

Я просто хочу иметь дерево чекбоксов с QComboBox'es в секундустолбец ...

m_model->setColumnCount(2);
for (int i = 0; i < sectionCount; i++)
{
    QStandardItem * section = new QStandardItem(tr("Section %1").arg(i+1));
    section->setCheckable(true);
    section->setCheckState(Qt::Checked);

    for (int j = 0; j < itemsCount; j++)
    {
        QStandardItem * item = new QStandardItem(tr("Item %1").arg(j+1));
        item->setCheckable(true);
        item->setCheckState(Qt::Checked);

        QStandardItem * item2 = new QStandardItem("xxx");

        section->appendRow(QList<QStandardItem*>() << item << item2);

        QComboBox * combo = new QComboBox();
        QModelIndex index = m_model->index(j, 1, );

        // HERE i have index = {-1;-1}

        ui->treeView_options->setIndexWidget(index, combo);
    }
    m_model->appendRow(section);
}

Можно ли использовать setIndexWidget таким образом?

ОБНОВЛЕНИЕ:

У меня нет QComboBox во втором столбце... почему?

Ответы [ 2 ]

6 голосов
/ 05 ноября 2012

это возможно на самом деле. Я бы порекомендовал сначала создать модель с двумя столбцами. Создайте элементы в ряд и добавьте их в модель. Только после того, как вы добавили строку с элементами, вы можете вызвать view->setIndexWidget() со своим содержимым в выпадающем списке. У меня это сработало, и у меня динамический контент. ItemDelegates сложнее, я бы порекомендовал setIndexWidget() - у меня сработало просто отлично.

1 голос
/ 12 марта 2012

Нет, не будет работать:

Эта функция должна использоваться только для отображения статического содержимого в видимой области, соответствующей элементу данных. Если вы хотите отображать пользовательский динамический контент или реализовывать пользовательский виджет редактора, используйте вместо этого подкласс QItemDelegate.

...