Qt之QML的知识记录

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,则任何潜在的绑定都将被解释为在输入状态时发生的一次性赋值。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值