myclass.h
-
-
-
-
-
-
class MyClass : public QObject
-
{
-
Q_OBJECT
-
//暴露给QML 属性
-
Q_PROPERTY(QString mystring READ getString WRITE setString NOTIFY mystringChanged)
-
private:
-
QString * m_pstring;
-
public:
-
explicit MyClass(QObject *parent = 0);
-
Q_INVOKABLE QString getString(); //Q_INVOCABLE暴露给 QML
-
Q_INVOKABLE void setString(QString string);
-
~MyClass();
-
-
signals:
-
void mystringChanged(QString value); //信号
-
public slots:
-
-
};
-
-
-
-
-
MyClass::MyClass(QObject *parent) : QObject(parent)
-
{
-
this->m_pstring= new QString( "默认值");
-
}
-
-
MyClass::~MyClass()
-
{
-
delete this->m_pstring;
-
}
-
QString MyClass::getString()
-
{
-
setString( "xx");
-
return *( this->m_pstring);
-
}
-
void MyClass::setString(QString string){
-
*( this->m_pstring)= string;
-
emit mystringChanged(string); //发送信号
-
}
main.cpp
-
-
-
-
-
int main(int argc, char *argv[])
-
{
-
QGuiApplication app(argc, argv);
-
//注册到QML,留意注册函数所在的位置
-
qmlRegisterType<MyClass>( "RegisterMyType", 1, 0, "MyClassType");
-
QQmlApplicationEngine engine;
-
engine.load(QUrl(QStringLiteral( "qrc:/main.qml")));
-
-
return app.exec();
-
}
main.qml
-
import QtQuick 2.4
-
import QtQuick.Window 2.2
-
import QtQuick.Controls 1.2
-
import QtQuick.Controls.Styles 1.2
-
import RegisterMyType 1.0 //导入
-
Window {
-
visible: true
-
Button{
-
id:btn1;
-
height: 20;
-
width: 60;
-
text: "按钮";
-
onClicked: {
-
//qml操作c++
-
btn1.text=myobj.mystring;
-
}
-
}
-
Label{
-
id:label1;
-
text: "初始值";
-
anchors. left:btn1. right;
-
anchors.leftMargin: 12;
-
}
-
//创建对象
-
MyClassType
-
{
-
id:myobj;
-
}
-
//连接信号 到qml
-
Connections{
-
target:myobj;
-
onMystringChanged:label1.text= "改变了值是:"+value; //这里的value是signal信号函数里面的参数
-
}
-
-
}