C++与QML交互①

一、C++中调用qml

1、首先在qml中编写这样一段测试代码


    Rectangle{                    //矩形框关键字
        width: 200             
        height: 200             
        border.color: "black"
        Text {
            id: text1          //id唯一
            objectName: "text1"    //必须添加,C++用这个名字来定位(可能说的不太准确)
            text: qsTr("123")     //我们要在C++中修改这里的内容
            font.pixelSize: 50
            anchors.centerIn: parent  //让字体在矩形框中居中显示
        }
        anchors.centerIn: parent      //让矩形框在窗口中居中显示
    }

2、我们新建一个C++的类,必须继承于object,类的名称必须大写!要不然在qml中查不到

3、在 main.cpp文件中 添加如下内容(有备注的是要添加的,没有备注的是新建文件自带的)

#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include "hello.h"    //包含头文件

int main(int argc, char *argv[])
{
    QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
    QGuiApplication app(argc, argv);

    Hello h; //这里是要添加的内容

    QQmlApplicationEngine engine;
    engine.load(QUrl(QLatin1String("qrc:/main.qml")));
    
    h.setProotobject(engine.rootObjects().first());//这里必须添加,必须添加在这里或以下,要不然不起作用
    if (engine.rootObjects().isEmpty())
        return -1;
    h.setX(); //这个函数是修改qml中的内容,具体执行过程在hello.cpp中定义

    return app.exec();
}

4、在新建c++文件中的h文件中添加如下内容(有备注的是要添加的,没有备注的是新建文件自带的)

#ifndef HELLO_H
#define HELLO_H

#include <QObject>
#include <QVariant>  //必须要包含的头文件,要不然编译时报错

class Hello : public QObject
{
    Q_OBJECT
public:
    explicit Hello(QObject *parent = nullptr);
    void setX();  //自定义一个函数

    QObject *prootobject() const;       //必须添加
    void setProotobject(QObject *prootobject); //必须添加

signals:
private:
    QObject* m_prootobject = nullptr;  //定义一个object,并赋值,C++11中可以直接在h文件中进行赋值

public slots:
};

#endif // HELLO_H

5、在新建的cpp文件中添加如下内容

#include "hello.h"

Hello::Hello(QObject *parent) : QObject(parent)
{

}

QObject *Hello::prootobject() const
{
    return m_prootobject;
}

void Hello::setProotobject(QObject *prootobject)
{
    m_prootobject = prootobject;
}
void Hello::setX()  //这里就是该函数的具体实现过程
{
    QObject *pText = m_prootobject->findChild<QObject*>("text1");  
    pText->setProperty("text","hello qml");  //定位该元素并修改,如果没有包含4中的头文件这里会报错
}

6、运行结果

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值