我的0.114基础QML+Felgo(V-Play)学习(3) (近日解决的问题

DDL就快到了晚上加班(迫真)和作业繁重、、、所以最近博客?更新,这几天的开发着实遇到了不少❓,譬如为应用添加Tcp?上传组件对QT c++基础较弱的我而言,仅研究+调试就消耗了相当的时间…总算是有能在期限前完成的希望了。
遇到的问题大致有几个:第一,每个NavigationItem的Page页面Title栏的隐藏问题,可以将title元素设为空(默认是“”),再将navigationBarTranslucency(状态栏透明度)设为1(完全透明),此外很多控件例如AppTextField等有backgroundcolor属性都可以将其设置为Qt.rgba(x,x,x,0)达成透明效果。需要注意的是设置NavigationBar透明度时如果同时import了QtQuick.Controlls 2.x版本这个属性会变得不合法,还没有找到原因,妥协办法是更换引用1.x版本。
第二:MouseArea的覆盖问题:比如

Rectangle{
	MouseArea{ anchors.fill: parent; }
	Text{
		....
		MouseArea{ anchors.fill:parent; }

会造成子控件MouseArea被覆盖的问题,解决方法是将MouseArea整合到一起,由于内层的MouseArea不能再用anchors定位,所以需要手动设定x,y,height,width等参数或者是利用z属性调整层次(自我感觉这样很容易造成层的混乱,对简单元件可以这样操作)之后即可正常使用。
第三:动态创建的组件间的参数传递问题与局部变量的设置问题
由于我用搜索引擎查询了关于函数Component.createObject()函数的用法却无果而终,便开始考虑能否用其他方式操作动态创建的组件(没有使用Loader),最后选择的方法是申请变量var储存动态创建的对象,举个例子
la = label.createObject(parent,{});
但是这种写法也有相当的弊端,普通来讲这个property var变量要申请在当前qml文件的根层元素中,很是不便,而且对于la的子元素直接操作也并非易事,于是有了这样的解决办法:(添加一个QtObject用于储存变量)

QtObject{
         id: obj;
         property var lab;
         property bool isLabelNotCreated: true;
}

之后使用自带的Destroy()方法销毁即可

onClicked: {
            if(obj.isLabelNotCreated){
            	obj.lab = label.createObject(parent,{});
            	obj.isLabelNotCreated = false;
            }
            else{
                 obj.lab.destroy(300);
                 obj.isLabelNotCreated = true;
            }
}

此外,操作有多重嵌套的Component时可以在其中创建方法,利用id调用的方式处理:

Component{
        id: label;
        Image{
            id: labimg;
            function changeText(txt){
                textField.text = txt;
            }
            function returnText(){
                return textField.text;
            }
            signal dest();
            source: "../assets/image/paper.png";
            height: textField.height + dp(20);
            width: textField.width + dp(10);
            anchors.bottom: parent.top;
            anchors.horizontalCenter: parent.horizontalCenter;
                //(ps:这缩进十分不友好)
                AppTextEdit{
                    id: textField;
                    
                    anchors.top: parent.top;
                    anchors.topMargin: dp(5);
                    anchors.right: parent.right;
                    anchors.rightMargin: dp(4);
                    height: text.height;
                    width: text.width;
                    text: " ";
                }
             .......

            //onDestroyed: {
                
            //}
        }
        
    }

其他列如需要记录位置的散点使用repeater…等等如果有兴趣的问题可以回复再一起讨论。

最后重写(非原创) 了一份可用于v-play(felgo)的c++Tcp发送文件交互类并连接到前端,已经上传到csdn,有兴趣的可以看看,个人感觉还是蛮有价值的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值