QtableView将整行设置为只读

时间:2017-02-05 12:21:27

标签: c++ qt row readonly qtableview

我在将QTableView的整行设置为只读时遇到问题。当我使用setEnabled方法时,它只会使第一列只读。这是一个例子,我在表中添加一个新行,并尝试将整行写为readonly:

void CItemsMenu::addSlave(const quint8 addr, const QString& uniqId, const QString& userString)
{
    // create new item
    QStandardItem* item = new QStandardItem(m_columnLabels.size()); // size is 3

    // make item readonly
    item->setEditable(false); // this makes only the 1st column readonly

    // append new item
    mp_itemsModel->appendRow(item);
    int row = mp_itemsModel->rowCount() - 1;

    // slave address
    mp_itemsModel->setData(mp_itemsModel->index(
                                 row, (int)itemsTableCol::slaveAddr, QModelIndex()), addr, Qt::EditRole);

    // unique ID
    mp_itemsModel->setData(mp_itemsModel->index(
                                 row, (int)itemsTableCol::uniqId, QModelIndex()), uniqId, Qt::EditRole);

    // user string
    mp_itemsModel->setData(mp_itemsModel->index(
                                 row, (int)itemsTableCol::userStr, QModelIndex()), userString, Qt::EditRole);
}

我将非常感谢你的帮助。

编辑:解决方案:

QList<QStandardItem*> itemsList;
for (int i = 0; i < m_columnLabels.size(); i++)
{
     itemsList.append(new QStandardItem(1));
     itemsList.last()->setEditable(false);
}

1 个答案:

答案 0 :(得分:1)

每个单元格需要一个项目。

致电时:

mp_itemsModel->appendRow(item);

您只需为第一列设置项目。引用Qt文档:

  

构建只有一列的列表或树时,此功能   提供了一种附加单个新项目的便捷方式。

在处理QTableView时,您应该调用appendRow()的重载QList<QStandardItem *>。像这样:

QList<QStandardItem *> list;
... // Fill list and set all items in the list to be read-only.
mp_itemsModel->appendRow(list);