QT += quick //添加quick模块
QQuickView //视图 用来链接QML和程序
0
QQuickView viewer;//Quick视图
viewer.setSource(QUrl(QLatin1String("qrc:///qml/qmlvideofx/Main.qml")));//加载视图QML文件
viewer.setResizeMode(QQuickView::SizeRootObjectToView);//视图将自动将根项调整为视图的大小
viewer.show();//显示
QQmlApplicationEngine //qml引擎 用来链接程序和qml文件
QT += qml
QQmlApplicationEngine ::load(QUrl(QLatin1String(“qrc:///qml/qmlvideofx/Main.qml”)));//加载QML文件(需链接信号与曹)
[signal] void QQmlApplicationEngine::objectCreated(QObject *object, const QUrl &url)
该信号在对象完成加载时发出。如果加载成功,对象包含一个指向加载对象的指针,否则指针为空。
还提供了对象来自的组件的url。
注意:如果组件的路径是作为包含相对路径的QString提供的,那么url将包含文件的完全解析路径。-
如果要在QML中调用c++中得函数 那么在定义函数时须在返回值前面添加一个标记 Q_INVOKABLE(注册一个方法到QML) 或者是qt中得槽函数
将c++对象作为属性注册到QML
#include<QQmlContext>//上下文允许将数据公开给由QML引擎实例化的QML组件。 QQuickView viewer;//视图 QQmlContext *x=view.rootContext();//返回上下文里的根指针QQmlContext类型 xxx data;//自定义类对象 x->setContextProperty("在QML中访问的自定义对象名 xxx",&data);//注册一个对象到QML 设置属性将&data注册到QML中data是自定义类对象 这样在 qML中就可以使用自定义类对象的方法了在自定义类中 data对象的方法需加 Q_INVOKABLE //QML中 import QtCharts 2.0 Item //QML中最基本得对象 { xxx.xxx//这里就是自定义对象名,和他的方法 Text { text: } //可声明一些属性或者添加一些对象 } viewer.setSource(QUrl(QLatin1String("qrc:///qml/qmlvideofx/Main.qml")));//加载视图QML文件 viewer.setResizeMode(QQuickView::SizeRootObjectToView);//视图将自动将根项调整为视图的大小 viewer.show();//显示
在c++中调用QML中的函数
//QML中
import QtCharts 2.0
Item //QML中最基本得对象
{
Text
{
id:qmlf
function qmlFunction(msg)//QML中自定义函数
{
console.log("打印",msg)
return "abc"
}
qmlFunction("数据")//QML中调用自定义函数
}
//可声明一些属性或者添加一些对象
qmlf.qmlFunction("数据")//QML中调用自定义函数
}
程序中用引擎
QQmlApplicationEngine engine;//qml引擎 用来链接程序和qml文件
QQmlCompoent compen(&engine,"QML文件路径");//QML组件并添加到引擎//如果路径是在下层目录需加../否则直接写名称即可
QObject *object=compen.create();//创建一个组件并用QObject指针指向他
QVariant msg="hello qml";//QVariant对象每次保存单个类型()的单个值。
QVariant retVal;
QMetaObject::invokeMethod(obj, "qmlFunction", Q_RETURN_ARG(QVariant,retVal),//这个是返回值
Q_ARG(QVariant, msg));//这个是传参
// Q_RETURN_ARG,Q_ARG必须指定QVariant类型 //程序中调用QML函数
c++中调用QML中的信号
import QtCharts 2.0
Item //QML中最基本得对象
{
Item
{
id:item
width:100
height:100
signal:qmlsignal(string msg)
MouseArea//鼠标
{
anchors.fill:parent//鼠标的点击的区域为父窗口的区域
onClicked:item.qmlSignal("wai")//鼠标点击了发射信号
}
}
//可声明一些属性或者添加一些对象
}
c++程序中
#include<QQuickItem>//Quick项
QQuickView viewer(QUrl(QLatin1String("qrc:///qml/qmlvideofx/Main.qml");//视图
QObject*item=viewer.rootObject();//返回跟对象 QQuickItem类型
xxx xxx;//自定义类
QObject::commect(item,SIGNAL(qmlSignal(QString)),&xxx,SLOT(自定义类的槽函数(QString)));
viewer.show();//视图显示
QML
QML支持许多基本类型。
基本类型是引用简单值的类型,例如int或string。这与QML对象类型形成对比,QML对象类型是指具有属性、信号、方法等的对象。与对象类型不同,基本类型不能用于声明QML对象:例如,不可能声明int{}对象或size{}对象。
基本类型可指:
单个值(例如int指单个数字,var可以指单个项目列表)
包含一组简单属性-值对的值(例如,大小指v)
import QtQuick 2.0
import QtCharts 2.0
Item //QML中最基本得对象
{
Item
{
signal:QML自定义信号
text:
}
//可声明一些属性或者添加一些对象
}
QML设计模式 QT其他项目Qt Quick UI