main.qml
import QtQuick 2.0
import QtQuick.Window 2.12
import QtQuick.Controls 2.5
//导入MyObj
import MyObj 1.0
Window {
id:window
width: SCREENWIDTH
height: 300
color: "white"
visible: true
property int value:myobj.iValue
onValueChanged: {
console.log(value)
}
MyObject{
id:myobj
iValue: 10
}
Button{
onClicked: {
myobj.iValue=2000//修改变量
console.log(value)//结果是10没有发生动态绑定
/*
Qt Creator 4.9.1
Based on Qt 5.12.3 (MSVC 2017, 32 bit)
*/
}
}
}
MyObject.h
#ifndef MYOBJECT_H
#define MYOBJECT_H
#include <QObject>
#include <QDebug>
class MyObject : public QObject
{
Q_OBJECT
public:
explicit MyObject(QObject *parent = nullptr);
int iValue() const;
void setIValue(int iValue);
QString sString() const;
void setSString(const QString &sString);
private:
int m_iValue;
QString m_sString;
Q_PROPERTY(int iValue READ iValue WRITE setIValue NOTIFY iValueChanged)
signals:
void iValueChanged();
public slots:
};
#endif // MYOBJECT_H
MyObject.cpp
#include "myobject.h"
MyObject::MyObject(QObject *parent) : QObject(parent)
{
}
int MyObject::iValue() const
{
return m_iValue;
}
void MyObject::setIValue(int iValue)
{
m_iValue = iValue;
}
QString MyObject::sString() const
{
return m_sString;
}
void MyObject::setSString(const QString &sString)
{
m_sString = sString;
}
main.cpp
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QQmlContext>
#include <QScreen>
#include <myobject.h>
int main(int argc, char *argv[])
{
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
//全局上下文对象
QQmlContext* context=engine.rootContext();
//获取屏幕宽度
QScreen* screen=QGuiApplication::primaryScreen();
QRect rect=screen->virtualGeometry();
context->setContextProperty("SCREENWIDTH",rect.width()/2);
//注册MyObject
qmlRegisterType<MyObject>("MyObj",1,0,"MyObject");
const QUrl url(QStringLiteral("qrc:/main.qml"));
QObject::connect(&engine, &QQmlApplicationEngine::objectCreated,
&app, [url](QObject *obj, const QUrl &objUrl) {
if (!obj && url == objUrl)
QCoreApplication::exit(-1);
}, Qt::QueuedConnection);
engine.load(url);
return app.exec();
}
.pro
CONFIG += c++11 qmltypes
QML_IMPORT_NAME = MyObj
QML_IMPORT_MAJOR_VERSION=1