• 3244阅读
  • 3回复

[提问]请问qml怎么写一个有contentItem的组件 [复制链接]

上一主题 下一主题
离线fanzongsao
 

只看楼主 倒序阅读 楼主  发表于: 2019-09-09
是这样的,我写了一个组件Rec.qml,是一个父Rectangle包含两个子Rectangle,son1 和 son2;
然后在main.qml里调用Rec组件了4次,代码框架如下面所示。

现在我想直接在main里重写里的 rec3 的子son1, 就像是自定义 Button 时的 contentItem 属性一样,
请问该怎么修改Rec.qml才能实现这个功能。

刚接触 qml 不久,找了挺多资料也没能找到实现这个功能的办法,见笑了。
请各位大佬不吝赐教!



  //Rec.qml        
            Rectangle
            {
                        id: father
                        Rectangle  { id: son1 }
                        Rectangle  { id: son2 }
             }
  //main.qml
            ColumnLayout
            {
                        Rec{ id: rec1 }
                        Rec{ id: rec2 }
                        Rec{ id: rec3 }
                         Rec{ id: rec4 }
           }
离线小韩老师

只看该作者 1楼 发表于: 2019-09-09
  //Rec.qml        
            Rectangle
            {
                        id: father
                       property alias son1width: son1.width
                        Rectangle  { id: son1 }
                        Rectangle  { id: son2 }
             }
  //main.qml
            ColumnLayout
            {
                        Rec{ id: rec1 }
                        Rec{ id: rec2 }
                        Rec{ id: rec3 }
                         Rec{ id: rec4 }
           }
// 通过alias的方式将需要导出的属性进行封装,是不是你要的功能?
离线fanzongsao

只看该作者 2楼 发表于: 2019-09-10
不是,我想要的功能是:在调用Rec组件的时候能够自定义一个Rectangle去取代Rec.qml中的son1Rectangle.
类似下面这样的

//main.qml
            ColumnLayout
            {
                        Rec{ id: rec1 }
                        Rec{ id: rec2 }
                        Rec
                        {            
                                    id: rec3
                                    contentItem: Rectangle   //这个contentItem的Rectangle会直接替换Rec中的son1组件
                                    {
                                                                        id: son1
                                                                        ....
                                    }
                        }
                         Rec{ id: rec4 }
           }
离线xiii_1991

只看该作者 3楼 发表于: 2020-04-08
我不知道官方控件里面的contentItem是如何实现的,但是我有两种曲线的方法。
1.你可以继承官方的Control控件,它预置了background和contentItem供你替换,可以通过paddings,insets控制它们的布局
2.自己画一个空的Item,自己控制Item的布局,并且设置成visible:false。使用的时候,内部建立新的元件,是可以anchor.fill平级控件的,所以可以填充这个预置的隐藏方块,曲线实现了contentItem。
快速回复
限100 字节
 
上一个 下一个