SANSARA
SANSARA13 июля 2026 г.10 мин

Qt Proxy Model: сортировка ΠΈ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡ Π΄Π°Π½Π½Ρ‹Ρ… Π² Qt/QML (2026)

Qt Proxy Model β€” модСль-Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ для Qt/QML Π² 2026: ΠΊΠ°ΠΊ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ сортировку ΠΈ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡŽ Ρ‚Π°Π±Π»ΠΈΡ† ΠΈ списков Π½Π° Π»ΠΈΡ‡Π½ΠΎΠΌ VPS SANSARA. ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ шаги для iOS, Android, Windows, macOS.

VPSSANSARAΠ³Π°ΠΉΠ΄

Qt Proxy Model позволяСт ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ порядок строк, ΡΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ вычисляСмыС столбцы Π±Π΅Π· измСнСния исходной ΠΌΠΎΠ΄Π΅Π»ΠΈ. Π’Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ слой ΠΌΠ΅ΠΆΠ΄Ρƒ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΈ интСрфСйсом. Π‘ Π»ΠΈΡ‡Π½Ρ‹ΠΌ VPS SANSARA Π²Ρ‹ Ρ€Π°Π·Π²Π΅Ρ€Π½Ρ‘Ρ‚Π΅ ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ Qt/QML Π·Π° нСсколько ΠΌΠΈΠ½ΡƒΡ‚: рСгистрация β†’ Π΄Π°Π½Π½Ρ‹Π΅ Π² ΠΊΠ°Π±ΠΈΠ½Π΅Ρ‚Π΅ β†’ ΠΈΠΌΠΏΠΎΡ€Ρ‚ Π² ΠΊΠ»ΠΈΠ΅Π½Ρ‚ β†’ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΉ Π·Π°Ρ‰ΠΈΡ‰Ρ‘Π½Π½Ρ‹ΠΉ ΠΊΠ°Π½Π°Π» ΠΊ Π²Π°ΡˆΠ΅ΠΌΡƒ сСрвСру. Настройка Qt Proxy Model сводится ΠΊ созданию класса-наслСдника QSortFilterProxyModel ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡŽ Π΅Π³ΠΎ ΠΊ QML-ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΡŽ.

ΠšΠΎΡ€ΠΎΡ‚ΠΊΠΎ:

  • Qt Proxy Model β€” это прокси-слой ΠΌΠ΅ΠΆΠ΄Ρƒ исходной модСлью ΠΈ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠΌ (QTableView, ListView).
  • ΠŸΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚ ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ строки ΠΏΠΎ столбцам, Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎ условиям, Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ столбцы.
  • Π Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² Qt Widgets ΠΈ Qt Quick (QML), ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ C++ ΠΈ QML-ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡŽ.
  • Π‘ Π»ΠΈΡ‡Π½Ρ‹ΠΌ VPS SANSARA Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ ΡƒΠ·Π΅Π» для сборки ΠΈ тСстирования Qt-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π±Π΅Π· ΠΎΠ±Ρ‰Π΅Π³ΠΎ ΠΏΡƒΠ»Π°.
  • Telegram-Π±ΠΎΡ‚ SANSARA ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ сСрвСром ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ увСдомлСния Π±Π΅Π· прямого доступа ΠΊ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Ρƒ.

Π§Ρ‚ΠΎ это ΠΈ ΠΊΠΎΠΌΡƒ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚

Qt Proxy Model β€” это класс-ΠΎΠ±Ρ‘Ρ€Ρ‚ΠΊΠ° Π½Π°Π΄ любой QAbstractItemModel (QSqlTableModel, QStandardItemModel, QFileSystemModel ΠΈ Π΄Ρ€.). Он Π½Π΅ мСняСт исходныС Π΄Π°Π½Π½Ρ‹Π΅, Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ ΠΈΡ… прСдставлСниС: мСняСт порядок строк, скрываСт Ρ‡Π°ΡΡ‚ΡŒ записСй, добавляСт вычисляСмыС столбцы.

ΠšΠΎΠΌΡƒ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚:

  • Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ Qt Widgets, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ хотят Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ сортировку ΠΏΠΎ ΠΊΠ»ΠΈΠΊΡƒ Π½Π° Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹.
  • Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ Qt Quick (QML), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π½ΡƒΠΆΠ½Π° Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡ списков ΠΏΠΎ тСксту поиска.
  • Π’Π΅ΠΌ, ΠΊΡ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Ρ‡Π΅Ρ€Π΅Π· QSqlTableModel ΠΈ Ρ…ΠΎΡ‡Π΅Ρ‚ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Ρ‚ΡŒ записи Π½Π° сторонС ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°.
  • Командам, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚Π΅ΡΡ‚ΠΈΡ€ΡƒΡŽΡ‚ интСрфСйсы Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… устройствах Ρ‡Π΅Ρ€Π΅Π· Π»ΠΈΡ‡Π½Ρ‹ΠΉ VPS SANSARA.

Если Π²Ρ‹ ΡƒΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Qt Model/View, прокси-модСль упростит Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΉ сортировки ΠΈ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ Π±Π΅Π· пСрСписывания Π»ΠΎΠ³ΠΈΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ….

Как Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΏΠΎ шагам (с Π»ΠΈΡ‡Π½Ρ‹ΠΌ VPS SANSARA)

Π¨Π°Π³ 1. ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° окруТСния Π½Π° Π»ΠΈΡ‡Π½ΠΎΠΌ VPS

  1. 01Π—Π°Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΡƒΠΉΡ‚Π΅ΡΡŒ Π² SANSARA ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ Π»ΠΈΡ‡Π½Ρ‹ΠΉ VPS.
  2. 02Π’ ΠΊΠ°Π±ΠΈΠ½Π΅Ρ‚Π΅ Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Π»ΠΎΠΊΠ°Ρ†ΠΈΡŽ (9+ стран), создайтС сСрвСр.
  3. 03Π˜ΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ Π² ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π½Π° вашСм устройствС.
  4. 04Π—Π°Ρ‰ΠΈΡ‰Ρ‘Π½Π½Ρ‹ΠΉ ΠΊΠ°Π½Π°Π» ΠΊ Π²Π°ΡˆΠ΅ΠΌΡƒ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌΡƒ ΡƒΠ·Π»Ρƒ Π³ΠΎΡ‚ΠΎΠ².

На сСрвСрС установитС Qt (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‡Π΅Ρ€Π΅Π· ΠΏΠ°ΠΊΠ΅Ρ‚Π½Ρ‹ΠΉ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ ΠΈΠ»ΠΈ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ установщик). Для тСстирования интСрфСйсов ΠΏΠΎΠ΄ΠΎΠΉΠ΄Ρ‘Ρ‚ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€: Qt Core, Qt GUI, Qt Widgets ΠΈΠ»ΠΈ Qt Quick.

Π¨Π°Π³ 2. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ прокси-ΠΌΠΎΠ΄Π΅Π»ΠΈ Π² C++

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ для Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ с ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌΠΈ:

`cpp // usersmodel.h class UsersModel : public QSqlTableModel { Q_OBJECT public: explicit UsersModel(QObject *parent = nullptr); };

// usersproxymodel.h

class UsersProxyModel : public QSortFilterProxyModel { Q_OBJECT public: explicit UsersProxyModel(QObject *parent = nullptr); protected: bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const override; bool lessThan(const QModelIndex &left, const QModelIndex &right) const override; }; `

`cpp // usersproxymodel.cpp UsersProxyModel::UsersProxyModel(QObject *parent) : QSortFilterProxyModel(parent) { setFilterCaseSensitivity(Qt::CaseInsensitive); }

bool UsersProxyModel::filterAcceptsRow(int source_row, const QModelIndex &source_parent) const { // Π€ΠΈΠ»ΡŒΡ‚Ρ€ΡƒΠ΅ΠΌ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ (столбСц 1) ΠΈ email (столбСц 2) auto idxName = sourceModel()->index(source_row, 1, source_parent); auto idxEmail = sourceModel()->index(source_row, 2, source_parent); QString name = sourceModel()->data(idxName).toString(); QString email = sourceModel()->data(idxEmail).toString(); QString filter = filterRegExp().pattern(); return name.contains(filter, Qt::CaseInsensitive) || email.contains(filter, Qt::CaseInsensitive); }

bool UsersProxyModel::lessThan(const QModelIndex &left, const QModelIndex &right) const { // Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΏΠΎ Π°Π»Ρ„Π°Π²ΠΈΡ‚Ρƒ для строковых столбцов QVariant leftData = sourceModel()->data(left); QVariant rightData = sourceModel()->data(right); return leftData.toString().toLower() < rightData.toString().toLower(); } `

Π¨Π°Π³ 3. ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΊ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Ρƒ

`cpp // main.cpp UsersModel *model = new UsersModel(this); model->setTable("users"); model->select();

UsersProxyModel *proxyModel = new UsersProxyModel(this); proxyModel->setSourceModel(model);

QTableView *view = new QTableView; view->setModel(proxyModel); view->setSortingEnabled(true); // Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ сортировку ΠΏΠΎ ΠΊΠ»ΠΈΠΊΡƒ Π½Π° Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ `

Π¨Π°Π³ 4. ВСстированиС Π½Π° Π»ΠΈΡ‡Π½ΠΎΠΌ VPS SANSARA

  • Π‘ΠΎΠ±Π΅Ρ€ΠΈΡ‚Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° вашСм VPS.
  • ЗапуститС Π΅Π³ΠΎ локально ΠΈΠ»ΠΈ Ρ‡Π΅Ρ€Π΅Π· X11-Ρ„ΠΎΡ€Π²Π°Ρ€Π΄ΠΈΠ½Π³ / ΡƒΠ΄Π°Π»Ρ‘Π½Π½Ρ‹ΠΉ доступ.
  • ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ сортировку ΠΈ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡŽ: Π²Π²ΠΎΠ΄ тСкста Π² QLineEdit Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ proxyModel->setFilterFixedString(text).

Telegram-Π±ΠΎΡ‚ SANSARA ΡƒΠ΄ΠΎΠ±Π΅Π½ для получСния ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠΉ ΠΎ сборкС ΠΈΠ»ΠΈ пСрСзапускС сСрвиса.

Устройства: iPhone, Android, Windows, macOS

Qt Proxy Model Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π²Π΅Π·Π΄Π΅, Π³Π΄Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Qt. Π Π°Π·Π½ΠΈΡ†Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² способС развёртывания ΠΈ тСстирования.

Π£ΡΡ‚Ρ€ΠΎΠΉΡΡ‚Π²ΠΎΠšΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Qt Proxy Model с SANSARA
WindowsΠ‘ΠΎΠ±Π΅Ρ€ΠΈΡ‚Π΅ Qt-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° Π»ΠΈΡ‡Π½ΠΎΠΌ VPS, тСстируйтС Ρ‡Π΅Ρ€Π΅Π· RDP ΠΈΠ»ΠΈ локально.
macOSΠ Π°Π·Π²Π΅Ρ€Π½ΠΈΡ‚Π΅ сСрвСр Π½Π° VPS, ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°ΠΉΡ‚Π΅ΡΡŒ Ρ‡Π΅Ρ€Π΅Π· ΠΊΠ»ΠΈΠ΅Π½Ρ‚ SANSARA, тСстируйтС UI ΡƒΠ΄Π°Π»Ρ‘Π½Π½ΠΎ.
AndroidДля ΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Qt for Android, сСрвСр Π½Π° VPS β€” бэкСнд ΠΈΠ»ΠΈ тСстовый стСнд.
iPhoneАналогично Android: Qt для iOS + Π»ΠΈΡ‡Π½Ρ‹ΠΉ VPS ΠΊΠ°ΠΊ бэкСнд ΠΈΠ»ΠΈ срСда для ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ сСрвСрной части.

На всСх ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ… Π»ΠΎΠ³ΠΈΠΊΠ° прокси-ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Π°: Π²Ρ‹ настраиваСтС Π΅Ρ‘ Π² C++ ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚Π΅ ΠΊ ListView (QML) ΠΈΠ»ΠΈ QTableView (Widgets). SANSARA Π΄Π°Ρ‘Ρ‚ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ ΡƒΠ·Π΅Π», Ρ‡Ρ‚ΠΎΠ±Ρ‹ сборки ΠΈ тСсты Π½Π΅ зависСли ΠΎΡ‚ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΎΠ±Ρ‰Π΅Π³ΠΎ ΠΏΡƒΠ»Π°.

ЧастыС ошибки ΠΈ ΠΊΠ°ΠΊ ΠΈΡ… ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ

  1. 01Π—Π°Π±Ρ‹Π»ΠΈ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ setSourceModel

Π‘Π΅Π· установки исходной ΠΌΠΎΠ΄Π΅Π»ΠΈ прокси Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚. ВсСгда провСряйтС порядок: создали ΠΈΡΡ…ΠΎΠ΄Π½ΡƒΡŽ модСль β†’ создали прокси β†’ proxy->setSourceModel(source).

  1. 01Π€ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ ΠΈΠ·-Π·Π° рСгистра

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ чувствитСлСн ΠΊ рСгистру. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ setFilterCaseSensitivity(Qt::CaseInsensitive).

  1. 01Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° Π½Π΅ срабатываСт ΠΏΠΎ ΠΊΠ»ΠΈΠΊΡƒ Π½Π° Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ

Π’ Qt Widgets Π½ΡƒΠΆΠ½ΠΎ явно Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ сортировку: view->setSortingEnabled(true). Π’ QML ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ SortFilterProxyModel ΠΈΠ· сторонних Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ ΠΈΠ»ΠΈ свой QAbstractProxyModel.

  1. 01ΠŸΡ€ΠΎΠΊΡΠΈ-модСль Π½Π΅ обновляСтся ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ исходных Π΄Π°Π½Π½Ρ‹Ρ…

Если исходная модСль ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ испускаСт сигналы dataChanged, прокси обновляСтся автоматичСски. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ ваша модСль наслСдуСт QAbstractItemModel ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ увСдомляСт ΠΎΠ± измСнСниях.

  1. 01ΠŸΡƒΡ‚Π°Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ индСксами source ΠΈ proxy

Π’ filterAcceptsRow ΠΈ lessThan индСксы относятся ΠΊ исходной ΠΌΠΎΠ΄Π΅Π»ΠΈ. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ sourceModel()->data(index).

  1. 01ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ° Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎ нСсмысловым столбцам

Π€ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡ ΠΏΠΎ ID ΠΈΠ»ΠΈ тСхничСским полям сбиваСт ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. Π€ΠΈΠ»ΡŒΡ‚Ρ€ΡƒΠΉΡ‚Π΅ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ, описанию, email β€” Ρ‚Π΅ΠΌ полям, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²ΠΈΠ΄ΠΈΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ.

FAQ

`cpp QVariant UsersProxyModel::data(const QModelIndex &index, int role) const { if (role == Qt::DisplayRole && index.column() == computedColumnIndex) { // Π‘ΠΎΠ±ΠΈΡ€Π°Π΅ΠΌ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· исходной ΠΌΠΎΠ΄Π΅Π»ΠΈ auto first = sourceModel()->data(createIndex(index.row(), 1)).toString(); auto last = sourceModel()->data(createIndex(index.row(), 2)).toString(); return QString("%1 %2").arg(first).arg(last); } return QSortFilterProxyModel::data(index, role); } `

`cpp bool UsersProxyModel::lessThan(const QModelIndex &left, const QModelIndex &right) const { int statusLeft = sourceModel()->data(left.sibling(left.row(), statusCol)).toInt(); int statusRight = sourceModel()->data(right.sibling(right.row(), statusCol)).toInt(); if (statusLeft != statusRight) return statusLeft < statusRight; // Π‘Π½Π°Ρ‡Π°Π»Π° статус с мСньшим Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ // Π—Π°Ρ‚Π΅ΠΌ ΠΏΠΎ Π΄Π°Ρ‚Π΅ QDateTime dateLeft = sourceModel()->data(left.sibling(left.row(), dateCol)).toDateTime(); QDateTime dateRight = sourceModel()->data(right.sibling(right.row(), dateCol)).toDateTime(); return dateLeft < dateRight; } `

МоТно Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Qt Proxy Model Π² QML Π±Π΅Π· C++?+

Бтандартная поставка Qt Π½Π΅ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π³ΠΎΡ‚ΠΎΠ²ΡƒΡŽ прокси-модСль для QML. Но Π΅ΡΡ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π²Ρ€ΠΎΠ΄Π΅ SortFilterProxyModel (QQC2) ΠΈΠ»ΠΈ собствСнныС Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π° C++, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ QML-Ρ‚ΠΈΠΏΡ‹. Для ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ контроля Π»ΡƒΡ‡ΡˆΠ΅ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ свой прокси Π½Π° C++ ΠΈ Π·Π°Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π² QML.

Как Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎ нСскольким полям ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ?+

Π’ filterAcceptsRow провСряйтС всС Π½ΡƒΠΆΠ½Ρ‹Π΅ столбцы. НапримСр, Ссли Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ ΠΈ Π³ΠΎΡ€ΠΎΠ΄Ρƒ, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ Π΄Π°Π½Π½Ρ‹Π΅ для source_row Π² столбцах ΠΈΠΌΠ΅Π½ΠΈ ΠΈ Π³ΠΎΡ€ΠΎΠ΄Π° ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚Π΅ условиС Π˜Π›Π˜ ΠΈΠ»ΠΈ И.

Как Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ вычисляСмый столбСц Π² прокси-модСль?+

ΠŸΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅ data Π² вашСм классС прокси. НапримСр, столбСц «ПолноС имя» ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ ΠΈΠ· ΠΈΠΌΠ΅Π½ΠΈ ΠΈ Ρ„Π°ΠΌΠΈΠ»ΠΈΠΈ:

ΠŸΠΎΡ‡Π΅ΠΌΡƒ послС Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ сбиваСтся?+

Π’Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с индСксами прокси-ΠΌΠΎΠ΄Π΅Π»ΠΈ. Если Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ скрываСт строки, индСксы ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ. Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с исходными Π΄Π°Π½Π½Ρ‹ΠΌΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, сохранСниС ID) Ρ…Ρ€Π°Π½ΠΈΡ‚Π΅ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ Π² ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΈ сопоставляйтС ΠΈΡ… Ρ‡Π΅Ρ€Π΅Π· mapToSource / mapFromSource.

Как Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΡΠ»ΠΎΠΆΠ½ΡƒΡŽ сортировку (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, сначала ΠΏΠΎ статусу, ΠΏΠΎΡ‚ΠΎΠΌ ΠΏΠΎ Π΄Π°Ρ‚Π΅)?+

Π’ lessThan сравнивайтС Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠΎ нСскольким полям. НапримСр, Ссли статус ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚:

Π˜Ρ‚ΠΎΠ³

  • Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ QSortFilterProxyModel для добавлСния сортировки ΠΈ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ Π±Π΅Π· измСнСния исходных Π΄Π°Π½Π½Ρ‹Ρ….
  • На Π»ΠΈΡ‡Π½ΠΎΠΌ VPS SANSARA Ρ€Π°Π·Π²Π΅Ρ€Π½ΠΈΡ‚Π΅ Qt-ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ Π·Π° нСсколько ΠΌΠΈΠ½ΡƒΡ‚ Ρ‡Π΅Ρ€Π΅Π· ΠΊΠ°Π±ΠΈΠ½Π΅Ρ‚ ΠΈ ΠΈΠΌΠΏΠΎΡ€Ρ‚ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ.
  • ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°ΠΉΡ‚Π΅ прокси-модСль ΠΊ QTableView (Widgets) ΠΈΠ»ΠΈ ListView (QML) для ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Ρ… Ρ‚Π°Π±Π»ΠΈΡ† ΠΈ списков.
  • Π˜Π·Π±Π΅Π³Π°ΠΉΡ‚Π΅ Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹Ρ… ошибок: Π½Π΅ Π·Π°Π±Ρ‹Π²Π°ΠΉΡ‚Π΅ setSourceModel, настраивайтС Ρ‡ΡƒΠ²ΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΊ рСгистру, провСряйтС сигналы обновлСния Π΄Π°Π½Π½Ρ‹Ρ….
  • Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ ΡƒΠ·Π΅Π» SANSARA ΠΈ Telegram-Π±ΠΎΡ‚Π° для ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ тСстирования Π½Π° всСх устройствах: iPhone, Android, Windows, macOS.

Π•Ρ‰Ρ‘ ΠΏΠΎ Ρ‚Π΅ΠΌΠ΅

CTA Β· SANSARA

Π›ΠΈΡ‡Π½Ρ‹ΠΉ VPS β€” Π±Π΅Π· Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π° ΠΈ ΠΎΡ‡Π΅Ρ€Π΅Π΄Π΅ΠΉ

РСгистрация, ΠΈΠΌΠΏΠΎΡ€Ρ‚ профиля ΠΈ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ ΠΊΠ°Π½Π°Π» Π½Π° Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½ ΠΈ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€. Π’ΠΎΡ‚ ΠΆΠ΅ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΌΡ‹ пишСм Π² Π±Π»ΠΎΠ³Π΅ β€” Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅.