Potrzebuje posortować QTreeWidget po wartościach int a nie po QString. Dla przykładu mam: 0x1, 0x021, 0x2, 0x035, 0x3. Wynikiem sortowania po int powinno być 0x1, 0x2 , 0x021, 0x3, 0x035. Napisałem taką klasę:
class TreeWidgetItem : public QTreeWidgetItem
{
public:
TreeWidgetItem(QTreeWidget* parent);
TreeWidgetItem();
// QTreeWidgetItem interface
bool operator <(const QTreeWidgetItem &other) const override;
TreeWidgetItem &operator=(const TreeWidgetItem &other);
};
TreeWidgetItem::TreeWidgetItem(QTreeWidget *parent): QTreeWidgetItem(parent)
{
}
TreeWidgetItem::TreeWidgetItem()
{
}
bool TreeWidgetItem::operator <(const QTreeWidgetItem &other) const
{
bool ok_num, ok_num2;
int sortCol = treeWidget()->sortColumn();
int num = text(sortCol).toUInt(&ok_num,16);
int num2 = other.text(sortCol).toUInt(&ok_num2,16);
if(ok_num && ok_num2)
{
return num<num2;
}
else
{
return text(sortCol) < other.text(sortCol);
}
}
W klasie main wszędzie gdzie używałem QTreeWidgetItem , zamieniłem na typ TreeWidgetItem. Ale pojawiły się błedy:
itemList = ui->treeWidget->selectedItems();
error: no match for 'operator=' (operand types are 'QList<TreeWidgetItem>' and 'QList<QTreeWidgetItem>')**
findList = ui->treeWidget->findItems(ui->searchText->toPlainText(), Qt::MatchRecursive,selectedColumn);
error: no match for 'operator=' (operand types are 'QList<TreeWidgetItem>' and 'QList<QTreeWidgetItem>')**
Próbowałem przeładować operator=
TreeWidgetItem &TreeWidgetItem::operator=(const TreeWidgetItem &other)
{
list=other.list;
return *this;
}
gdzie list jest typu QList<TreeWidgetItem*> ale nie pomogło.