2009-12-04 178 views

回答

3

我相信你需要继承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); 

希望这会有所帮助,至于