QTableView表格中出现多余的Checkbox

转载时请注明出处和作者联系方式
作者联系方式: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参数的作用!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值