Details
-
Bug
-
Resolution: Incomplete
-
P2: Important
-
None
-
5.6.3, 5.9.4
-
None
-
Visual studio 2017
Windows 10 x64
Qt 5.6.3 x86 built with:
configure -debug-and-release -force-debug-info -opensource -shared -nomake examples -no-compile-examples -qt-sql-mysql -qt-sql-odbc -plugin-sql-mysql -plugin-sql-odbc -opengl dynamic -platform win32-msvc2015 -target xp -no-icu -ltcg -no-wmf-backend -make-tool jom -optimized-tools -prefix d:/sdk/qt/5.6.3/2017.x86
Qt 5.9.4 x86 built with:
configure -debug-and-release -force-debug-info -separate-debug-info -opensource -confirm-license -shared -ltcg -nomake examples -no-compile-examples -sql-mysql -sql-odbc -sql-sqlite -plugin-sql-mysql -plugin-sql-odbc -opengl dynamic -platform win32-msvc -no-icu -make-tool jom -optimized-tools -prefix d:/sdk/qt/5.9.4/2017.x86 -sse2 -sse3 -ssse3 -sse4.1 -sse4.2 -avx -avx2 -gif -sslVisual studio 2017 Windows 10 x64 Qt 5.6.3 x86 built with: configure -debug-and-release -force-debug-info -opensource -shared -nomake examples -no-compile-examples -qt-sql-mysql -qt-sql-odbc -plugin-sql-mysql -plugin-sql-odbc -opengl dynamic -platform win32-msvc2015 -target xp -no-icu -ltcg -no-wmf-backend -make-tool jom -optimized-tools -prefix d:/sdk/qt/5.6.3/2017.x86 Qt 5.9.4 x86 built with: configure -debug-and-release -force-debug-info -separate-debug-info -opensource -confirm-license -shared -ltcg -nomake examples -no-compile-examples -sql-mysql -sql-odbc -sql-sqlite -plugin-sql-mysql -plugin-sql-odbc -opengl dynamic -platform win32-msvc -no-icu -make-tool jom -optimized-tools -prefix d:/sdk/qt/5.9.4/2017.x86 -sse2 -sse3 -ssse3 -sse4.1 -sse4.2 -avx -avx2 -gif -ssl
Description
If we expose a QSortFilterProxyModel derived class to the QML engine it doesn't work and fails with:
Unable to assign MyModel to [unknown property type]
This is on the line where I try to set the sourceModel property in QML. It starts working as soon as I:
import QtQuick.Controls 1.5
Interesting enough it's complaining about a property of a QAbstractItemModel* type, while a QAbstractItemModel derived class, used in a view works flawlessly even without importing QtQuick.Controls. Is that by design or a bug? I didn't find the documentation which states that QtQuick.Controls are needed in order to get QSortFilterProxyModel to work in QML.
my class has a basic signature of:
class BCSortFilterProxyModel : public QSortFilterProxyModel
{
Q_OBJECT
public:
BCSortFilterProxyModel(QObject * parent = 0);
~BCSortFilterProxyModel();
Q_INVOKABLE void setSourceModel(QAbstractItemModel * sourceModel);
Q_INVOKABLE void setMultiFilter(const QVariantMap &filter);
Q_PROPERTY(QAbstractItemModel* sourceModel READ sourceModel WRITE setSourceModel)
Q_PROPERTY(QVariantMap multiFilter READ multiFilter WRITE setMultiFilter)
QVariantMap multiFilter() const;
QAbstractItemModel* sourceModel() const {return dataModel;}
protected:
bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const;
private:
BCItemModel *dataModel;
QMultiMap<int, QString> mFilter;
}
.. registered to QML with ...
qmlRegisterType<BCSortFilterProxyModel>("BecozLib", 1, 0, "BCSortFilterProxyModel");
and used like:
import BecozLib 1.0
BCSortFilterProxyModel {
id: filteredModel
sourceModel: MyModel
multiFilter: {"myRole": ">=100", "myRole": "<200", "mySecondRole": "=true"}
}