LINUX.ORG.RU

QML: Unable to assign [undefined] to

 ,


0

1

/me выдыхает, успокаивается и готовится излагать без матов и излишней предвзятости.

Для программы под Андроид решил перевести интерфейс на QML. До этого с ним дел не имел (и, похоже, никогда больше не буду), поэтому могу тупить на ровном месте.

Основа интерфейса ListView:
Выглядит так:

    ListView
    {
        id: listView
        x: 16
        y: 146
        width: 262
        height: 282
        model: myModel
        delegate: Item
        {
            x: 5
            width: 80
            height: 40
            Row
            {
                id: row1
                spacing: 10
                Text
                {
                    width: 50
                    text:model.modelData.getPassword
                    font.bold: true
                    anchors.verticalCenter: parent.verticalCenter
                }
                ProgressBar
                {
                    value: model.modelData.getDifficulty
                }
            }
        }
    }


В main() заполняю список так:
	QList<QObject*> dataList;
	dataList.append(new DataObject("Item 1", 50));
	dataList.append(new DataObject("Item 2", 60));
	dataList.append(new DataObject("Item 3", 70));
	dataList.append(new DataObject("Item 4", 80));


	QGuiApplication app(argc, argv);
	qmlRegisterType<BackEnd>("tk.asciigames.backend", 1, 0, "BackEnd");

	QQmlApplicationEngine engine;

	engine.rootContext()->setContextProperty("myModel", QVariant::fromValue(dataList));

	engine.load(QUrl(QStringLiteral("qrc:/main.qml")));

	return app.exec();


DataObject выглядит так:
class DataObject : public QObject
{
	Q_OBJECT

	Q_PROPERTY(QString password			READ getPassword)
	Q_PROPERTY(unsigned int difficulty	READ getDifficulty)
public:
	DataObject(QString _pass, unsigned int _difficulty)
	{
		difficulty = _difficulty;
		password = _pass;
	}

	QString getPassword()
	{
		return password;
	}

	unsigned int getDifficulty()
	{
		return difficulty;
	}

private:
	unsigned int	difficulty;
	QString			password;

};


При запуске таблица визуально имеет 4 строки (как и ожидалось), но данных нет. В логах ошибки вида
qrc:/main.qml:118:26: Unable to assign [undefined] to QString
qrc:/main.qml:124:28: Unable to assign [undefined] to double


Ошибки соответствуют QML-ным строкам
text:model.modelData.getPassword
value: model.modelData.getDifficulty


Т.е. массив со стороны QML, похоже, виден, но вытащить непосредственные значения он не может.

Подскажите, у кого глаз намётан на такие вещи...

Deleted

Ответ на: комментарий от Deleted

Можно text:model.modelData.getPassword() (скобки!), но тогда в плюсах метод пометить Q_INVOKABLE.

fluorite ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.