[QT_019]Qt学习技巧之QListWidget取消item前面的复选框

1.QListWidget的item存储数据

QListWidget的item,想要存储数据,可以根据item 的不同角色去存储数据,也可以自定义角色(角色是枚举类型的,自定义一般1000开始)。取数据的时候,根据自己自定义的角色数据取数据。一般默认的item会赋予这4个角色:

ItemIsSelectable

ItemIsDragEnabled

ItemIsUserCheckable

ItemIsEnabled

如果想item前面的复选框可以勾选,只需要item设置:

current->setCheckState(Qt::Checked);

这样做,其实是将QListWidget中的indicator展示出来,并不是一个QCheckBox,所以在设置样式的时候,需要设置QListWidget的indicator。

QListWidget::indicator {
    width: 13px;
    height: 13px;
}

QListWidget::indicator:unchecked {
    image: url(:/images/checkbox_unchecked.png);
}

QListWidget::indicator:unchecked:hover {
    image: url(:/images/checkbox_unchecked_hover.png);
}

QListWidget::indicator:unchecked:pressed {
    image: url(:/images/checkbox_unchecked_pressed.png);
}

QListWidget::indicator:checked {
    image: url(:/images/checkbox_checked.png);
}

QListWidget::indicator:checked:hover {
    image: url(:/images/checkbox_checked_hover.png);
}

QListWidget::indicator:checked:pressed {
    image: url(:/images/checkbox_checked_pressed.png);
}

但是,如果想要取消item前面的复选框,需要设置:

previous->setCheckState(Qt::Unchecked);//这样只是改变了勾选的状态,并不能让其消失不显示

实际上,查看源码可以知道,item使用CheckStateRole这一角色,设置了数据,所以只要移除了这个CheckStateRole角色,就可以达到不显示复选框的效果。

inline void setCheckState(Qt::CheckState state)
        { setData(Qt::CheckStateRole, static_cast<int>(state)); }

但是更好的做法在下面:

previous->setData(Qt::CheckStateRole, QVariant());//设为无效值,这样可以达到想要的效果

以此类推,别的类型的item也可以使用这种方法实现效果。

2.QListWidget禁止鼠标滚轮滚动带动item滚动(禁用滚动条)

ui->listWidget->verticalScrollBar()->setDisabled(true);

但是,这样做之后,发现确实滚动滚轮,item不会联动,但是,当鼠标在QListWidget的两端拖动时,item还是会滚动。其实当鼠标在QListWidget的两端拖动时,变化的是QAbstractScrollArea的视图视野(QListWidget曾继承QAbstractScrollArea),以求将所有item展示出来。此时,还需要对QListWidget进行如下设置:

ui->listWidget->setAutoScroll(false);

这样,才算是正真不随滚轮的滚动而滚动!

3.QListWidget中item滚动到指定的位置

ui->listWidget->scrollToBottom();//滚动到最底部
ui->listWidget->scrollToItem(const QListWidgetItem *item, QAbstractItemView::ScrollHint hint = EnsureVisible);//滚动到任意一个item位置
ui->listWidget->scrollToTop();//滚动到最顶部
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值