QT开发中文网

QML 如何调用C++里面的函数

在Qt中,可以通过Qt元对象系统(QObject)实现QML与C++的交互。以下是一种调用C++函数的基本方法:

  1. 在C++中,创建一个继承自QObject的类,并在该类中声明需要被调用的函数。
// MyObject.h

#ifndef MYOBJECT_H
#define MYOBJECT_H

#include <QObject>

class MyObject : public QObject
{
    Q_OBJECT
public:
    explicit MyObject(QObject *parent = nullptr);

signals:
    void mySignal();

public slots:
    void myFunction();
};

#endif // MYOBJECT_H
  1. 实现这些函数。
// MyObject.cpp

#include "MyObject.h"
#include <QDebug>

MyObject::MyObject(QObject *parent) : QObject(parent)
{
}

void MyObject::myFunction()
{
    qDebug() << "C++ function called!";
}
  1. 在main.cpp或其他适当的地方,将该对象注册到QML引擎中。
// main.cpp

#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include "MyObject.h"

int main(int argc, char *argv[])
{
    QGuiApplication app(argc, argv);

    QQmlApplicationEngine engine;

    MyObject myObj;
    engine.rootContext()->setContextProperty("myObj", &myObj);

    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();
}
  1. 在QML中,通过对象名调用C++函数。
// main.qml

import QtQuick 2.15
import QtQuick.Controls 2.15

ApplicationWindow {
    visible: true
    width: 400
    height: 300
    title: "QML and C++"

    Button {
        text: "Call C++ Function"
        onClicked: myObj.myFunction()
    }
}

这样,在点击按钮时,QML会调用C++中的myFunction()函数。

需要注意的是,为了使C++类能够在QML中使用,该类必须继承自QObject并且使用Q_OBJECT宏进行声明。还需要将该对象注册到QML引擎的上下文中,以便在QML代码中访问和使用。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://qt.0voice.com/?id=9582

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?