如何单独从QTableView和QStandardItemModel获取复选框项?

时间:2009-12-04 22:39:25

标签: qt nokia qtableview

似乎使用model.setData(index,Qt :: Checked,Qt :: CheckStateRole)不足以使复选框正常工作。有什么建议吗?

1 个答案:

答案 0 :(得分:3)

我相信你需要继承QStandardItemModel;覆盖flags方法并返回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);

希望这有帮助,尊重