继承的QListWidgetItem和重载的运算符<。如何确保QListWidget正确排序?

时间:2012-09-24 13:17:43

标签: qt sorting inheritance operator-overloading

我创建了一个名为PageRangeListWidgetItem的新类,它继承自QListWidgetItem

class PageRangeListWidgetItem : public QListWidgetItem
{
    ...
    private:
        int start, end;

        bool operator<(const PageRangeListWidgetItem &other) const {
            if (start == other.start)
                return end < other.end;
            return start < other.start;
        }
};

并且这些项目正通过用户输入添加到QListWidget。 QListWidget只包含这些PageRangeListWidgetItem,所以我希望通过调用QListWidget的sortItems()函数,它将使用重载的运算符&lt;根据我的喜好对项目进行排序,但不幸的是,它不会对列表进行排序,就像它包含纯QListWidgetItems一样。

如何更改此行为?我是否必须创建自定义QListWidget类或者是否有更简单的方法?

1 个答案:

答案 0 :(得分:1)

Qt框架调用的<函数是

virtual bool operator<(const QListWidgetItem &other) const

您定义的那个与此函数签名(PageRangeListWidgetItem而不是QListWidgetItem)不匹配,因此不会覆盖虚函数而不会被调用。

您需要编写一个<函数,该函数接收QListWidgetItem并使用该对象进行排序而不是自定义对象。