Сортировка с использованием QTableWidget - PullRequest
0 голосов
/ 26 апреля 2018

У меня есть QTableWidget. У меня проблема с сортировкой файлов и папок. Я опробовал следующие методы:

ui.table->horizontalHeader()->sortIndicatorOrder();
ui.table->sortItems(columnNumber, Qt::AscendingOrder);

Предположим, что мой первый столбец состоит из файлов и папок. Как я могу убедиться, что папки всегда остаются сверху, а файлы остаются после папок?

Нужно ли реализовывать некоторый логический оператор "<" для класса QTableWidget. </p>

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 26 апреля 2018

Да, вы можете перегрузить оператор <() и реализовать логику сортировки.

class CustomTableWidgetItem : public QTableWidgetItem
{

public:

    CustomTableWidgetItem(const QString txt = QString("0")) 
    :QTableWidgetItem(txt)
    {
        setTextAlignment( Qt::AlignCenter ); /* center the text */
    }

    bool operator <(const QTableWidgetItem& other) const
    {
        /* Implement logic here */
        /* e.g if(column == file) return true; */
        /* else return false; */
    }
};

Затем используйте new CustomTableWidgetItem вместо new QTableWidgetItem. Прочитайте мой другой пост , чтобы увидеть, как это делается на виджете.

Примечание по производительности: Если у вас много строк, используйте подход с представлением модели, если вы имеете дело только с парой строк, QTableWidget должен подойти. Если вы заметите, что сортировка займет пару секунд, пора переключаться.

0 голосов
/ 26 апреля 2018

Вы не должны использовать QTableWidget для файлов и папок, так как количество файлов и папок неизвестно. Производительность QTableWidget с огромным количеством элементов плохая.

Вы должны научиться делать Программирование модели / вида , и в ссылке есть пример того, как обращаться с файлами.

С представлением модели у вас есть представление, которое получает информацию от модели. Модель может быть (почти) произвольно огромной, и вид не имеет значения, потому что он загружает только то, что просматривает. Это не похоже на QTableWidget, который все время загружает и вызывает повышение производительности.

Теперь, что касается вашего вопроса о сортировке, вы должны использовать QSortFilterProxyModel, который вы задали в качестве модели для вашего вида, и вы установили в QSortFilterProxyModel исходную модель. Прокси работает как посредник между вашим представлением и моделью и может сортировать и фильтровать информацию перед ее передачей. Это правильный способ сортировки таблиц в Qt.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...