QTreeView与setIndexWidget

时间:2012-03-12 14:29:05

标签: c++ model-view-controller qt qtreeview qtreewidget

我正在使用QStandardItemModel和QStandardItem。

我不想写自己的模特和任何代表。

我只想在第二栏中找到QComboBox'的复选框树...

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 个答案:

答案 0 :(得分:6)

实际上是可能的。我建议先创建一个包含两列的模型。连续创建项目并将其附加到模型。只有在您添加了包含项目的行后,才能使用您的组合框内容调用view->setIndexWidget()。它对我有用,而且我有动态内容。 ItemDelegates更复杂,我建议setIndexWidget() - 为我工作就好了。

答案 1 :(得分:1)

不,不行:

此功能仅用于显示与数据项对应的可见区域内的静态内容。如果要显示自定义动态内容或实现自定义编辑器窗口小部件,请改为继承QItemDelegate。