qml作为一个界面语言我们应该在使用qml的时候尽量避免在qml中有复杂的逻辑功能实现,具体的逻辑功能应该在C++中实现如何在qml调用该功能。
我们先新建一个qml工程,在里面添加一个C++类。我们这里使用的方法是在C++中构造一个对象,将这个对象设置为QML的上下文属性,在QML环境中直接使用该属性。
贴出main.cpp的代码如下:
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <Qtqml>
#include <QQmlEngine>
#include "configure.h"
int main(int argc, char *argv[])
{
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
engine.rootContext()->setContextProperty("Configure",Configure::Instance);
engine.load(QUrl(QLatin1String("qrc:/main.qml")));
if (engine.rootObjects().isEmpty())
return -1;
return app.exec();
}
在把注册到qml中的类里面添加如下。
.h文件
public:
static Configure * Instance();
static void destroyInstance();
private:
static Configure * m_instance;
.cpp文件
Configure *Configure::m_instance = nullptr;
Configure *Configure::Instance()
{
if (m_instance == nullptr) {
m_instance = new Configure;
}
return m_instance;
}
void Configure::destroyInstance()
{
if (m_instance){
delete m_instance;
m_instance = NULL;
}
}
以上就完成在qml中注册C++类了。
下面就是我们应该如何在qml中调用C++ 函数和成员变量。
在qml中调用一个C++的成员变量。
在类.h里面里面加这个
Q_PROPERTY(QString showText READ showText WRITE setShowText NOTIFY showTextChanged)
然后在qml要使用该变量的地方 类.showText 就可以了。这个类就是刚刚注册的类。
如果不知道怎么使用Q_PROPERTY(QString showText READ showText WRITE setShowText NOTIFY showTextChanged)这个的话可以加qq2270689188咨询。
在qml中调用一个函数
public slots:
函数();
我们在qml文件中可以直接调用该函数。