Ich versuche, mehr über QtQuick und QML zu lernen. Mein aktuelles Ziel ist es, zu verstehen, wie Daten von einem C++ - Modell an meine Sicht gebunden werden. Bisher war ich in der Lage, das Modell in meiner QML einzurichten und Daten aus dem Modell zu erhalten, aber ich kann nicht herausfinden, wie ich meine Daten aktualisieren soll.Zwei-Wege-Bindung C++ Modell in QML
Wie richte ich zwei Wege für meine C++ Bindung Modell? Unten ist der Code, den ich bisher geschrieben habe.
message.h
class Message : public QObject
{
Q_OBJECT
Q_PROPERTY(QString author READ getAuthor WRITE setAuthor NOTIFY authorChanged)
Q_PROPERTY(QString message READ getMessage WRITE setMessage NOTIFY messageChanged)
Q_SIGNALS:
void authorChanged(QString author);
void messageChanged(QString message);
public:
Message(QObject *parent = 0);
QString getAuthor();
void setAuthor(QString author);
QString getMessage();
void setMessage(QString message);
private:
QString _author;
QString _message;
};
message.cpp
#include "message.h"
Message::Message(QObject *parent) : QObject(parent)
{
}
QString Message::getAuthor()
{
return _author;
}
void Message::setAuthor(QString author)
{
if(author != _author)
{
_author = author;
emit authorChanged(author);
}
}
QString Message::getMessage()
{
return _message;
}
void Message::setMessage(QString message)
{
if(message != _message)
{
_message = message;
emit messageChanged(message);
}
}
main.qml
import QtQuick 2.7
import QtQuick.Controls 2.0
import QtQuick.Layouts 1.0
import com.butts.messaging 1.0
ApplicationWindow {
visible: true
width: 640
height: 480
title: "Test"
Message {
id: testMessage
author: "Batman"
message: "Hello World!"
}
Flow {
TextField {
text: testMessage.message
}
Label {
text: testMessage.message
}
}
}
main.cpp
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include "message.h"
int main(int argc, char *argv[])
{
qmlRegisterType<Message>("com.butts.messaging", 1, 0, "Message");
//Message msg = Message();
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
engine.load(QUrl(QLatin1String("qrc:/main.qml")));
return app.exec();
}
P.S. Ich bin ein riesiger Noob an diesem so fühlen sich frei, alle anderen Fragen, darauf hinzuweisen (Formatierung, Standards, etc.) ich in meinem Code haben, muss ich irgendwie lernen lol
Edit 1
Nach Lesen @ Derm Antwort änderte ich meinen Code zu erreichen, was ich
wollteTextField {
id: editor
//Binding model -> view
text: testMessage.message
//Binding model <- view
Binding {
target: testMessage
property: "message"
value: editor.text
}
}
Label {
id: display
//Binding model -> view
text: testMessage.message
}
Dank @derM, die eine hervorragende Antwort war, ist es mir einen Platz zu starten gegeben. Vielen Dank! –
Gern geschehen! – derM