【转】QML调用C++

myclass.h

  1. #ifndef MYCLASS_H
  2. #define MYCLASS_H
  3. #include <QObject>
  4. #include<QString>
  5. class MyClass : public QObject
  6. {
  7. Q_OBJECT
  8. //暴露给QML 属性
  9. Q_PROPERTY(QString mystring READ getString WRITE setString NOTIFY mystringChanged)
  10. private:
  11. QString * m_pstring;
  12. public:
  13. explicit MyClass(QObject *parent = 0);
  14. Q_INVOKABLE QString getString(); //Q_INVOCABLE暴露给 QML
  15. Q_INVOKABLE void setString(QString string);
  16. ~MyClass();
  17. signals:
  18. void mystringChanged(QString value); //信号
  19. public slots:
  20. };
  21. #endif // MYCLASS_H
myclass.cpp
  1. #include "myclass.h"
  2. MyClass::MyClass(QObject *parent) : QObject(parent)
  3. {
  4. this->m_pstring= new QString( "默认值");
  5. }
  6. MyClass::~MyClass()
  7. {
  8. delete this->m_pstring;
  9. }
  10. QString MyClass::getString()
  11. {
  12. setString( "xx");
  13. return *( this->m_pstring);
  14. }
  15. void MyClass::setString(QString string){
  16. *( this->m_pstring)= string;
  17. emit mystringChanged(string); //发送信号
  18. }

main.cpp
  1. #include <QGuiApplication>
  2. #include <QQmlApplicationEngine>
  3. #include<QtQml>
  4. #include<myclass.h>
  5. int main(int argc, char *argv[])
  6. {
  7. QGuiApplication app(argc, argv);
  8. //注册到QML,留意注册函数所在的位置
  9. qmlRegisterType<MyClass>( "RegisterMyType", 1, 0, "MyClassType");
  10. QQmlApplicationEngine engine;
  11. engine.load(QUrl(QStringLiteral( "qrc:/main.qml")));
  12. return app.exec();
  13. }

main.qml
  1. import QtQuick 2.4
  2. import QtQuick.Window 2.2
  3. import QtQuick.Controls 1.2
  4. import QtQuick.Controls.Styles 1.2
  5. import RegisterMyType 1.0 //导入
  6. Window {
  7. visible: true
  8. Button{
  9. id:btn1;
  10. height: 20;
  11. width: 60;
  12. text: "按钮";
  13. onClicked: {
  14. //qml操作c++
  15. btn1.text=myobj.mystring;
  16. }
  17. }
  18. Label{
  19. id:label1;
  20. text: "初始值";
  21. anchors. left:btn1. right;
  22. anchors.leftMargin: 12;
  23. }
  24. //创建对象
  25. MyClassType
  26. {
  27. id:myobj;
  28. }
  29. //连接信号 到qml
  30. Connections{
  31. target:myobj;
  32. onMystringChanged:label1.text= "改变了值是:"+value; //这里的value是signal信号函数里面的参数
  33. }
  34. }



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值