查看完整版本: [-- 请问qml怎么写一个有contentItem的组件 --]

QTCN开发网 -> Qt QML开发 -> 请问qml怎么写一个有contentItem的组件 [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

fanzongsao 2019-09-09 18:43

请问qml怎么写一个有contentItem的组件

是这样的,我写了一个组件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 }
           }

小韩老师 2019-09-09 19:18
  //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 2019-09-10 16:36
不是,我想要的功能是:在调用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 2020-04-08 21:15
我不知道官方控件里面的contentItem是如何实现的,但是我有两种曲线的方法。
1.你可以继承官方的Control控件,它预置了background和contentItem供你替换,可以通过paddings,insets控制它们的布局
2.自己画一个空的Item,自己控制Item的布局,并且设置成visible:false。使用的时候,内部建立新的元件,是可以anchor.fill平级控件的,所以可以填充这个预置的隐藏方块,曲线实现了contentItem。


查看完整版本: [-- 请问qml怎么写一个有contentItem的组件 --] [-- top --]



Powered by phpwind v8.7 Code ©2003-2011 phpwind
Gzip disabled