Qt Proxy Model: ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ° ΠΈ ΡΠΈΠ»ΡΡΡΠ°ΡΠΈΡ Π΄Π°Π½Π½ΡΡ Π² Qt/QML (2026)
Qt Proxy Model β ΠΌΠΎΠ΄Π΅Π»Ρ-ΡΠΈΠ»ΡΡΡ Π΄Π»Ρ Qt/QML Π² 2026: ΠΊΠ°ΠΊ Π½Π°ΡΡΡΠΎΠΈΡΡ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΡ ΠΈ ΡΠΈΠ»ΡΡΡΠ°ΡΠΈΡ ΡΠ°Π±Π»ΠΈΡ ΠΈ ΡΠΏΠΈΡΠΊΠΎΠ² Π½Π° Π»ΠΈΡΠ½ΠΎΠΌ VPS SANSARA. ΠΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΠ°Π³ΠΈ Π΄Π»Ρ iOS, Android, Windows, macOS.
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
- 01ΠΠ°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΡΠΉΡΠ΅ΡΡ Π² SANSARA ΠΈ ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ Π»ΠΈΡΠ½ΡΠΉ VPS.
- 02Π ΠΊΠ°Π±ΠΈΠ½Π΅ΡΠ΅ Π²ΡΠ±Π΅ΡΠΈΡΠ΅ Π»ΠΎΠΊΠ°ΡΠΈΡ (9+ ΡΡΡΠ°Π½), ΡΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΡΠ΅ΡΠ²Π΅Ρ.
- 03ΠΠΌΠΏΠΎΡΡΠΈΡΡΠΉΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π² ΠΊΠ»ΠΈΠ΅Π½Ρ Π½Π° Π²Π°ΡΠ΅ΠΌ ΡΡΡΡΠΎΠΉΡΡΠ²Π΅.
- 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 Π΄Π°ΡΡ ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΡΠΉ Π²ΡΠ΄Π΅Π»Π΅Π½Π½ΡΠΉ ΡΠ·Π΅Π», ΡΡΠΎΠ±Ρ ΡΠ±ΠΎΡΠΊΠΈ ΠΈ ΡΠ΅ΡΡΡ Π½Π΅ Π·Π°Π²ΠΈΡΠ΅Π»ΠΈ ΠΎΡ Π½Π°Π³ΡΡΠ·ΠΊΠΈ ΠΎΠ±ΡΠ΅Π³ΠΎ ΠΏΡΠ»Π°.
Π§Π°ΡΡΡΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ ΠΈ ΠΊΠ°ΠΊ ΠΈΡ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ
- 01ΠΠ°Π±ΡΠ»ΠΈ Π²ΡΠ·Π²Π°ΡΡ setSourceModel
ΠΠ΅Π· ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΏΡΠΎΠΊΡΠΈ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ. ΠΡΠ΅Π³Π΄Π° ΠΏΡΠΎΠ²Π΅ΡΡΠΉΡΠ΅ ΠΏΠΎΡΡΠ΄ΠΎΠΊ: ΡΠΎΠ·Π΄Π°Π»ΠΈ ΠΈΡΡ ΠΎΠ΄Π½ΡΡ ΠΌΠΎΠ΄Π΅Π»Ρ β ΡΠΎΠ·Π΄Π°Π»ΠΈ ΠΏΡΠΎΠΊΡΠΈ β proxy->setSourceModel(source).
- 01Π€ΠΈΠ»ΡΡΡΠ°ΡΠΈΡ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π½Π΅ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ ΠΈΠ·-Π·Π° ΡΠ΅Π³ΠΈΡΡΡΠ°
ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΠΈΠ»ΡΡΡ ΡΡΠ²ΡΡΠ²ΠΈΡΠ΅Π»Π΅Π½ ΠΊ ΡΠ΅Π³ΠΈΡΡΡΡ. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ setFilterCaseSensitivity(Qt::CaseInsensitive).
- 01Π‘ΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ° Π½Π΅ ΡΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ ΠΏΠΎ ΠΊΠ»ΠΈΠΊΡ Π½Π° Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ
Π Qt Widgets Π½ΡΠΆΠ½ΠΎ ΡΠ²Π½ΠΎ Π²ΠΊΠ»ΡΡΠΈΡΡ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΡ: view->setSortingEnabled(true). Π QML ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ SortFilterProxyModel ΠΈΠ· ΡΡΠΎΡΠΎΠ½Π½ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ ΠΈΠ»ΠΈ ΡΠ²ΠΎΠΉ QAbstractProxyModel.
- 01ΠΡΠΎΠΊΡΠΈ-ΠΌΠΎΠ΄Π΅Π»Ρ Π½Π΅ ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΠΈΡΡ ΠΎΠ΄Π½ΡΡ Π΄Π°Π½Π½ΡΡ
ΠΡΠ»ΠΈ ΠΈΡΡ ΠΎΠ΄Π½Π°Ρ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΠΈΡΠΏΡΡΠΊΠ°Π΅Ρ ΡΠΈΠ³Π½Π°Π»Ρ dataChanged, ΠΏΡΠΎΠΊΡΠΈ ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅ΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ. ΠΡΠΎΠ²Π΅ΡΡΡΠ΅, ΡΡΠΎ Π²Π°ΡΠ° ΠΌΠΎΠ΄Π΅Π»Ρ Π½Π°ΡΠ»Π΅Π΄ΡΠ΅Ρ QAbstractItemModel ΠΈ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΡΠ²Π΅Π΄ΠΎΠΌΠ»ΡΠ΅Ρ ΠΎΠ± ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡΡ .
- 01ΠΡΡΠ°Π½ΠΈΡΠ° ΠΌΠ΅ΠΆΠ΄Ρ ΠΈΠ½Π΄Π΅ΠΊΡΠ°ΠΌΠΈ source ΠΈ proxy
Π filterAcceptsRow ΠΈ lessThan ΠΈΠ½Π΄Π΅ΠΊΡΡ ΠΎΡΠ½ΠΎΡΡΡΡΡ ΠΊ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ sourceModel()->data(index).
- 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 β Π±Π΅Π· ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Π° ΠΈ ΠΎΡΠ΅ΡΠ΅Π΄Π΅ΠΉ
Π Π΅Π³ΠΈΡΡΡΠ°ΡΠΈΡ, ΠΈΠΌΠΏΠΎΡΡ ΠΏΡΠΎΡΠΈΠ»Ρ ΠΈ ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΡΠΉ ΠΊΠ°Π½Π°Π» Π½Π° ΡΠ΅Π»Π΅ΡΠΎΠ½ ΠΈ ΠΊΠΎΠΌΠΏΡΡΡΠ΅Ρ. Π’ΠΎΡ ΠΆΠ΅ ΠΏΡΠΈΠ½ΡΠΈΠΏ, ΠΎ ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΌΡ ΠΏΠΈΡΠ΅ΠΌ Π² Π±Π»ΠΎΠ³Π΅ β Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅.