转载时请注明出处和作者联系方式
作者联系方式: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参数的作用!!
本文介绍了一个关于QTableView在使用时出现每个单元格内有无法点击的多余复选框的问题,并提供了通过修正data函数来解决此问题的具体方法。
2104





