【发布时间】:2009-12-05 12:09:48
【问题描述】:
似乎使用 model.setData(index, Qt::Checked,Qt::CheckStateRole) 不足以使复选框正常工作。有什么建议吗?
【问题讨论】:
标签: qt nokia qtableview
似乎使用 model.setData(index, Qt::Checked,Qt::CheckStateRole) 不足以使复选框正常工作。有什么建议吗?
【问题讨论】:
标签: qt nokia qtableview
我相信您需要继承 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);
希望这会有所帮助,问候
【讨论】: