Как взаимодействовать со значением Slider в Sailfish Silica / QML?

Кажется, я полностью потерялся в объявлении форм в QML. У меня есть объект C ++ с правильно установленными Q_PROPERTies, у меня есть доступ к объекту этого класса в QML, и я хочу использовать ползунки в QML. Как именно сделать так, чтобы значение Slider обновляло информацию о свойствах объекта, и наоборот?

2

Решение

Если это что-то похожее на обычный QML, тогда будут работать следующие подходы.

Свойство контекста

Используйте явный переплет или использовать ползунокЗначение valueChanged сигнала:

#include <QGuiApplication>
#include <QtQml>

class Object : public QObject
{
Q_OBJECT
Q_PROPERTY(qreal value READ value WRITE setValue NOTIFY valueChanged)
public:
explicit Object(QObject *parent = 0) :
QObject(parent),
mValue(0)
{
}

qreal value() const {
return mValue;
}

void setValue(qreal value) {
if (value != mValue) {
mValue = value;
emit valueChanged();
}
}
signals:
qreal valueChanged();
private:
qreal mValue;
};

int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);

Object object;

QQmlApplicationEngine engine;
engine.rootContext()->setContextProperty("object", &object);
engine.load(QUrl(QStringLiteral("qrc:///main.qml")));

return app.exec();
}

#include "main.moc"

main.qml:

import QtQuick 2.3
import QtQuick.Controls 1.2

ApplicationWindow {
width: 400
height: 400
visible: true

Binding {
target: object
property: "value"value: slider.value
}

Slider {
id: slider
// You can also react to the valueChanged signal of Slider:
//onValueChanged: object.value = value
}
}

Зарегистрированный тип QML

Используйте простую привязку:

#include <QGuiApplication>
#include <QtQml>

class Object : public QObject
{
Q_OBJECT
Q_PROPERTY(qreal value READ value WRITE setValue NOTIFY valueChanged)
public:
explicit Object(QObject *parent = 0) :
QObject(parent),
mValue(0)
{
}

qreal value() const {
return mValue;
}

void setValue(qreal value) {
if (value != mValue) {
mValue = value;
emit valueChanged();
}
}
signals:
qreal valueChanged();
private:
qreal mValue;
};

int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);

qmlRegisterType<Object>("Test", 1, 0, "Object");

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

return app.exec();
}

#include "main.moc"

main.qml:

import QtQuick 2.3
import QtQuick.Controls 1.2

import Test 1.0

ApplicationWindow {
width: 400
height: 400
visible: true

Object {
id: object
value: slider.value
onValueChanged: print(value)
}

Slider {
id: slider
}
}
2

Другие решения


По вопросам рекламы [email protected]