1

我创建了一个名为 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() 函数,它会使用重载的 operator< 根据我的喜好对项目进行排序,但不幸的是它没有,它继续对就好像它包含纯 QListWidgetItems 一样列出。

我怎样才能改变这种行为?我必须创建一个自定义 QListWidget 类还是有更简单的方法?

4

1 回答 1

1

Qt 框架调用的<函数是

virtual bool operator<(const QListWidgetItem &other) const

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

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

于 2012-09-24T14:33:42.757 回答