有没有一种简单的方法让QListWidget首先显示它保存的所有已检查项目,然后是所有未检查的项目,两个块按字母顺序排序?这样一个新检查的项目就会被自动放入"检查"在正确的地方阻止,反之亦然?
感谢所有建议: - )
答案 0 :(得分:0)
最简单的选择可能是创建自己的QListWidgetItem派生类,并使用less-than运算符的替代实现。即,有些东西:
class MyQListWidgetItem : public QListWidgetItem {
public:
// TODO: provide implementation of constructors
virtual bool operator< (const QListWidgetItem & other) const {
// if check state differs, use the difference for comparison
if(checkState() != other.checkState())
// Qt::Checked = 2 and Qt::Unchecked = 0 -> to get checked items first,
// we have to "revert" the comparison operation
return checkState() > other.checkState();
// otherwise just return the comparison result from the base class
return QListWidgetItem::operator < (other);
}
}
然后只需使用这个新的项目类将所有新项目插入到列表中,它应该根据您的需要进行排序。
要确保即使在用户更改项目状态后列表也已排序,您也应该在列表中创建一个在QListWidget::sortItems()
触发时QListWidget::itemChanged()
运行{{3}}的插槽。