Я использую QList<QObject*>
в качестве модели в своем приложении. Поскольку элементов может быть много, я решил использовать SectionScroller. Когда я пытаюсь прокрутить с помощью SectionScroller, я получаю
Error: Unable to assign [undefined] to QString
Что я делаю неправильно?
Мой ListView:
ListView
{
id: irrview
width: parent.width
model: irregulars.db // QList<QObject*>
anchors.top: caption.bottom
anchors.bottom: parent.bottom
clip: true
section.criteria: ViewSection.FirstCharacter
section.property: "form0"
section.delegate: Item {height: 10; width: parent.width; Text { text: section } } // for testing purposes
delegate: Rectangle
{
/**/
}
}
Спасибо
РЕДАКТИРОВАТЬ: больше кода:
заголовок irregulars
class IrregularListWrapper : public QObject
{
Q_OBJECT
Q_PROPERTY(QList<QObject*> db READ getdb NOTIFY langChanged)
Q_ENUMS(Language)
public:
enum Language
{
English = 0,
German = 1
};
IrregularListWrapper() : db(0) { setLang(German); }
~IrregularListWrapper() { delete db; }
QList<QObject*> getdb() const { return *db; }
Q_INVOKABLE void changeLang(Language l) { delete db; setLang(l); }
signals:
void langChanged();
protected:
void setLang(Language);
QList<QObject*> * db;
};
и тело функции
void IrregularListWrapper::setLang(Language l)
{
switch (l)
{
case English:
db = new english;
langName = "English";
break;
case German:
db = new german;
langName = "German";
break;
}
emit langChanged();
}
уроки немецкого, английского такие
class german : public QList<QObject*>
{
public:
german();
};
german::german()
{
append(new IrregularVerb("anfangen", "fing an", "angefangen"));
/*more like that*/
}
и неправильный глагол:
class IrregularVerb : public QObject
{
Q_OBJECT
Q_PROPERTY(QString form0 READ getForm0 NOTIFY formChanged)
Q_PROPERTY(QString form1 READ getForm1 NOTIFY formChanged)
Q_PROPERTY(QString form2 READ getForm2 NOTIFY formChanged)
public:
QString forms[3];
QString getForm0() const { return getForm(0); }
QString getForm1() const { return getForm(1); }
QString getForm2() const { return getForm(2); }
IrregularVerb(QString a, QString b, QString c) { forms[0] = a; forms[1] = b; forms[2] = c; }
protected:
const QString& getForm(const int& ind) const { return forms[ind]; }
signals:
void formChanged();
};
Редактировать 2: это не работает. Если я это сделаю
QVariantList getdb() const { return QVariant::fromValue(*db); }
IrregularListWrapper.h:24: error: could not convert 'QVariant::fromValue(const T&) [with T = QList<QObject*>; QVariant = QVariant]()' from 'QVariant' to 'QVariantList {aka QList<QVariant>}'
Если снять звезду, то ошибка аналогичная.
РЕДАКТИРОВАТЬ3:
Я обнаружил это http://ruedigergad.com/2011/08/22/qml-sectionscroller-vs-qabstractlistmodel/
И узнал, что irregulars.db.get
не определено
И изменил немецкий и английский на
class german : public AbstractIrregularList
а также
class AbstractIrregularList : public QObject, public QList<QObject*>
{
Q_OBJECT
public:
Q_INVOKABLE QObject* get(int index) {return at(index);}
};
Но даже сейчас нерегулярный.db.get(0) выдает ошибку (Результат выражения 'irregulars.db.get' [undefined] не является функцией.)
Почему так происходит, что Q_INVOKABLE не определяется? Макрос Q_OBJECT есть
/edit5: Даже при использовании QVariant ошибки остаются. Его можно рассматривать как QList или как QObject*.