QML是脚本语言,兼容JavaScript的语法,可以进行简单的业务逻辑:
本人项目为视频解码方面的,我暂时只负责界面UI的框架
在项目中遇到的各种问题
1:一般有图形,那么图形的存储方式那就有多种:arr,map等
在js中,arr可以直接用,但是map则是自定义,下面是网上一个列子:
import QtQuick 2.8
Item{
id: main;
Component{
id: test;
Item{
property string t: "test";
}
}
property var m: {"1": 1};
Component.onCompleted:{
m["1"]= "aaa";
m["2"]= "bbb";
m["3"]= "ccc";
m["4"]= test.createObject(main);
delete m["key2"];
console.log(m["4"].t);
// for(var prop in m){
// if(m.hasOwnProperty(prop)){
// console.log(m[prop]);
// }
// }
}
}
利用以上的方式,项目中用到了下面的函数来设置可用与否
function setEnableMap(map, set){
for(var i in map){
if(map[i] !== null)
{
map[i].enabled = set;
}
}
}
2:loader的一个关键用法:loader.iterm.function();可以放访问到动态加载的qml的里面的函数,这样就可以给动态加载的对象传递数值了。
3:QML中传递var参数到C++除了QVariantMap直接find字段,还可以变体内放一个数组data;如下:
property var shapeJson: {
"type": shapeComboBox.currentIndex,
"data": []
}
var obj = JSON.parse(strShape);
shapeComboBox.currentIndex = obj.type;
shapeJson = obj;
C++接受后进行如下处理
①:先获取QML传递过来的var shapeJson值转成 QString
②:将QString转成QJsonDocument
QString strShape = effectValue.find("shape").value().toString();
QJsonDocument jsonDocument = QJsonDocument::fromJson(strShape.toLocal8Bit().data());
if (!jsonDocument.isNull()) {
QJsonObject jsonObject = jsonDocument.object();
setShape = jsonObject.value("type").toInt();
QVariant vMap = jsonObject.value("data").toVariant();
if (vMap.type() == QVariant::List) {
QVariantList vList = vMap.toList();
for (int i=0; i<vList.size(); ++i) {
if (vList.at(i).type() == QVariant::Map) {
QVariantMap vTempMap = vList.at(i).toMap();
points.append(QSizeF(vTempMap.value("x").toFloat(), vTempMap.value("y").toFloat()));
}
}
}
}
4:QML截取路径是文件的类型:
感谢博主:https://blog.csdn.net/weixin_37861326/article/details/81702050
//后缀截取
var suffix = "";
try{
var fileArr = playerPath.split('.');
suffix = fileArr[fileArr.length -1];
}catch(err){
suffix ="";
}
stdModeObj.creatnewlayer(playerPath, groupId, layerIdent, flag);
if(suffix === "gif"){
stdModeObj.setLayerMediaType(layerIdent, "video", flag);
}else{
stdModeObj.setLayerMediaType(layerIdent, type, flag);
}
我需要获取gif的类型来设置相应的类型
5:如何解决循环绑定 QML中Binding loop detected for property "text"
http://www.qtcn.org/bbs/simple/?t44711.html
问题:代码片段
解决:代码片段
解决逻辑:添加explicit:true设置为true时 显式设置为true,则任何潜在的绑定都将被解释为在输入状态时发生的一次性赋值。