0
我在設置QTableView
的整行爲只讀時出現問題。當我使用setEnabled
方法時,它只使第一列只讀。下面是一個例子,我加入一個新行到表,並試圖使整個排只讀:QtableView將整行設置爲只讀
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);
}
但在這一行'QStandardItem *項目=新QStandardItem(m_columnLabels.size());'我創建3列的項目。如果它已經是一種列表,如何製作它的列表? – Bremen
@ŁukaszPrzeniosło這不是你在做什麼。原型是'QStandardItem :: QStandardItem(int rows,int columns = 1)',所以你正在用'm_columnLabels.size()'行和1列創建一個項目。此外,文檔中還提到「_構建一個包含子項的行和列列的項目。」因此,「行」和「列」編號與您的項目需要多少行/列無關,但有多少行/列你的項目的孩子將有。這隻在QTreeView中有用。 –
@ŁukaszPrzeniosło你應該看看文檔:http://doc.qt.io/qt-5/qstandarditemmodel.html#details –