кажется добил все таки. вот так работает
class MyModel : public QStandardItemModel{
Qt::ItemFlags flags(const QModelIndex & index ) const{
return QStandardItemModel::flags(index) | Qt::ItemIsUserCheckable;
}
QVariant data ( const QModelIndex & index, int role = Qt::DisplayRole ) const{
if ( !index.isValid() )
return QVariant();
if ( role == Qt::CheckStateRole )
{
QStandardItem* item = static_cast<QStandardItem*>(index.internalPointer());
return item->checkState();
}
return QStandardItemModel::data(index,role);
}
bool setData( const QModelIndex& index, const QVariant& value, int role ){
if (role == Qt::CheckStateRole){
QStandardItem* item = static_cast<QStandardItem*>(index.internalPointer());
Qt::CheckState state = (value.toInt() == 2) ? Qt::Checked : Qt::Unchecked;
item->setCheckState(state);
return QStandardItemModel::setData(index,value,role);
}
return QStandardItemModel::setData(index,value,role);
}
};
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QListView list;
MyModel model;
QStandardItem item;
item.setText("Test row");
model.appendRow(&item);
list.setModel(&model);
list.show();
return a.exec();
}
почитав доки увидел что допустил ошибку - в переопределении setData необходимо высылать сигнал dataChanged.