转载时请注明出处和作者联系方式
作者联系方式:Lutx (80437#zj.com)
最近使用QTableView/QAbstractItemModel编写一个界面表格时遇到一个想起来很奇怪的事情, 就是在许多单元格中都有一个多余的复选框(Checkbox)显示, 点击无反应, 如下图显示.
就这个问题折腾了很久, 最后利用google在国外的一个网站上[http://stackoverflow.com/questions/2396744/qtableview-has-unwanted-checkboxes-in-every-cell]找到答案, 原来是Model类中data函数的问题.
原来的代码是:
QVariant MyModel::data ( const QModelIndex & index, int role ) const
{
switch(index.column())
{
case 0 :
return "Visible";
case 1:
return "description";
case 2:
return "value";
case 3:
return "unit";
case 4:
default:
break;
}
return QVariant();
}
而正确的代码应该是在开始加上
if (role!=Qt::DisplayRole)
return QVariant();
也就是说在前一种写法中, 不管role为什么值, 都返回同样的结果, 这样会导致但role==Qt::CheckStateRole时, 返回值引起Qt显示错误.
所以在重载这个函数是不应该忽略role参数的作用!!