【问题标题】:Inherited QListWidgetItem and overloaded operator<. How to make sure that QListWidget sorts correctly?继承 QListWidgetItem 和重载 operator<。如何确保 QListWidget 正确排序?
【发布时间】:2012-09-24 13:17:42
【问题描述】:

我创建了一个名为 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

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

【问题讨论】:

    标签: qt sorting inheritance operator-overloading


    【解决方案1】:

    Qt框架调用的&lt;函数是

    virtual bool operator<(const QListWidgetItem &other) const
    

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

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

    【讨论】:

    • 谢谢,但我想不可能比较定义 PageRangeListWidgetItem 的额外属性“开始,结束”,不是吗?或者它可以像 bool operator
    • 我解决这个问题的方法通常是使用setData()data()函数。这让您可以存储可从具有基类类型的对象访问的任意数据。
    • 谢谢,这对我来说是新的,我会试一试并发表反馈:-)
    • 似乎可以解决问题,谢谢十亿!我希望您同意我稍微编辑您的答案并添加我现在使用的源代码?亲切的问候,你是我今天的英雄!
    猜你喜欢
    • 1970-01-01
    • 2015-09-14
    • 2022-01-13
    • 2010-11-17
    • 2011-05-03
    • 2011-04-19
    • 2017-01-15
    • 1970-01-01
    • 2017-12-14
    相关资源
    最近更新 更多