1
似乎使用model.setData(index,Qt :: Checked,Qt :: CheckStateRole)不足以讓複選框正常工作。有什麼建議麼?如何從QTableView和QStandardItemModel中單獨獲取複選框項?
似乎使用model.setData(index,Qt :: Checked,Qt :: CheckStateRole)不足以讓複選框正常工作。有什麼建議麼?如何從QTableView和QStandardItemModel中單獨獲取複選框項?
我相信你需要繼承QStandardItemModel;覆蓋標誌方法並返回Qt :: ItemIsUserCheckable以及帶有複選框的列的其他標誌。下面是一個例子:
class TableModel : public QStandardItemModel
{
public:
TableModel();
virtual Qt::ItemFlags flags (const QModelIndex & index) const;
};
TableModel::TableModel()
{
//???
}
Qt::ItemFlags TableModel::flags (const QModelIndex & index) const
{
Qt::ItemFlags result = QStandardItemModel::flags(index);
if (index.column()==1) result |= Qt::ItemIsUserCheckable;
return result;
}
這裏的我是如何初始化控制:
QStandardItemModel* tableModel = new TableModel();
// add columns
tableModel->insertColumn(0, QModelIndex());
tableModel->insertColumn(1, QModelIndex());
// add rows
tableModel->insertRows(0, 1, QModelIndex());
tableModel->insertRows(1, 1, QModelIndex());
// set text item
QModelIndex index0 = tableModel->index(0, 0, QModelIndex());
tableModel->setData(index0, QVariant("test item"), Qt::EditRole);
// set checkbox item
QModelIndex index1 = tableModel->index(0, 1, QModelIndex());
tableModel->setData(index1, QVariant(Qt::Checked), Qt::CheckStateRole);
ui->tableView->setModel(tableModel);
希望這會有所幫助,至於