[英]Sorting QListWidget Items (c++)
我有一個QlistWidget
,其項目如下,
item 1, item 2, item 3, ... , item 11, item 12, item 13
我想按降序對它們進行排序
item 13
item 12
item 11
item 10
item 9
item 8
item 7
item 6
item 5
item 4
item 3
item 2
item 1
但Qt::DescendingOrder
給了我:
item 9
item 8
item 6
item 5
item 4
item 3
item 2
item 13
item 12
item 11
item 10
item 1
有沒有其他方法可以做到這一點?
解決此問題的正確方法是在項目上定義自定義訂單。
創建一個繼承QListWidgetItem
的類MyListWidgetItem
並使用該類而不是基類來填充您的列表。 然后重載MyListWidgetItem::operator <
。 定義operator<
的最簡單方法是解析項目的文本。 更好的方法是將數字保存在私有字段中(例如, int MyListWidgetItem::index
)並使用該字段:
bool MyListWidgetItem::operator <(const QListWidgetItem& other) const
{
// TODO: make sure that `other` is actually a MyListWidgetItem
return this->index < static_cast<const MyListWidgetItem&>(other).index;
}
您還應該使用該字段按需生成項目的文本(減少冗余):
QVariant MyListWidgetItem::data(int role)
{
switch (role) {
case Qt::DisplayRole:
return QString("Item %1").arg(index);
default:
return QVariant();
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.