按检查状态对QListWidget中的项目进行排序

时间:2014-11-23 18:00:33

标签: c++ qt qt4

有没有一种简单的方法让QListWidget首先显示它保存的所有已检查项目,然后是所有未检查的项目,两个块按字母顺序排序?这样一个新检查的项目就会被自动放入"检查"在正确的地方阻止,反之亦然?

感谢所有建议: - )

1 个答案:

答案 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}}的插槽。