我在将QTableView
的整行设置为只读时遇到问题。当我使用setEnabled
方法时,它只会使第一列为只读。这是一个示例,我在表中添加了新行,并试图使整个行变为只读状态:
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);
}
最佳答案
每个单元格需要一件物品。
您打电话的时候:
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);