最近在跟着
C++ GUI Qt4第十章学习Model&View,这一章来来回回看了几遍,但还是很难理解透。
Qt预定义的那几个model大概还知道怎么使用,但对于自定义MODEL就很难理解,特别是data,setdata,flags等,分不清具体起什么作用。就拿Cities这个例子来说吧,我有下面两个
问题:
1. 怎样把里面的item设为checkable的? //这个问题我用下面的代码试了一下,但不行。
2. 当输入的数大于1000时,怎样把当前item改为checked?
谢谢。
- QVariant CityModel::data(const QModelIndex &index, int role) const
- {
- if (!index.isValid())
- return QVariant();
- if (role == Qt::CheckStateRole) {
- return QVariant(Qt::Unchecked); //我把例子原来语句改了,有BOX但不可以check.
- } else if (role == Qt::DisplayRole) {
- if (index.row() == index.column())
- return 0;
- int offset = offsetOf(index.row(), index.column());
- return distances[offset];
- }
- return QVariant();
- }
- bool CityModel::setData(const QModelIndex &index,
- const QVariant &value, int role)
- {
- if (index.isValid() && index.row() != index.column()
- && role == Qt::EditRole) {
- int offset = offsetOf(index.row(), index.column());
- distances[offset] = value.toInt();
- QModelIndex transposedIndex = createIndex(index.column(),index.row());
- emit dataChanged(index, index);
- emit dataChanged(transposedIndex, transposedIndex);
- return true;
- }
- return false;
- }
- QVariant CityModel::headerData(int section,
- Qt::Orientation /* orientation */,
- int role) const
- {
- if (role == Qt::DisplayRole)
- return cities[section];
- return QVariant();
- }
- Qt::ItemFlags CityModel::flags(const QModelIndex &index) const
- {
- Qt::ItemFlags flags = QAbstractItemModel::flags(index);
- if (index.row() != index.column())
- flags |= Qt::ItemIsEditable;
- flags |= Qt::ItemIsUserCheckable; //我加多了这一句!
- return flags;
- }
[ 此帖被alexltr在2011-04-21 23:33重新编辑 ]