QTreeView在第1列中包含白色框

时间:2018-04-18 08:47:25

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

有人可以回答我吗?为什么我的QTreeView在第一列之前显示白框? 我正在使用qt.5.6.0。

所有方法都是默认的,就像在官方教程中一样,并且有myModel :: data()的代码:

 QVariant MyModel::data(const QModelIndex &index, int role /*= 
 Qt::DisplayRole*/) const
{
    if (!index.isValid()) {
        return QVariant();
    }

    NodeInfo* nodeInfo = static_cast<NodeInfo*>(index.internalPointer());

    switch (index.column())
    {
    case 0:
    {
        auto name = QString::fromStdString(nodeInfo->getName());       
        return  QVariant(name);
        break;
    }
    case 1:
        if (role == Qt::DisplayRole || role == Qt::EditRole)
        {
            QString data = QString::fromStdString(nodeInfo->getValue());

            return QVariant(data);
        }
        break;
    default:
        break;
    }
    return QVariant();
}

enter image description here

1 个答案:

答案 0 :(得分:0)

编辑:根据评论更新。

data()方法为每个角色返回一个非空的QVariant,包括 Qt :: CheckStateRole 。这被QTreeView误解为检查状态。

修复是为了确保仅为DisplayRole返回正确的值:

case 0:
{
    if (role == Qt::DisplayRole) {
         auto name = QString::fromStdString(nodeInfo->getName());       
         return  QVariant(name);
    } else {
         return QVariant();
    }
    break;
}

老答案:

最有可能的是,flags()方法返回Qt :: ItemIsUserCheckable标志。

重新实现模型中的flags方法,以便项目不可检查(~Qt :: ItemIsUserCheckable)。有关详细信息,请查看文档here