1

QListWidgetItem から継承する PageRangeListWidgetItem という名前の新しいクラスを作成しました

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) と一致しないため、仮想関数をオーバーライドせず、呼び出されません。

カスタム オブジェクトではなく、<を取り込んでそのオブジェクトを使用して並べ替える関数を作成する必要があります。QListWidgetItem

于 2012-09-24T14:33:42.757 に答える