2013-02-19 46 views
1

我对QML非常陌生,而且我正努力在QML中定义基本布局。如何将一个元素定位到窗口,以便在窗口被用户调整大小时调整大小?我想添加一个矩形来填充窗口中的所有可用空间,但是我还没有找到从qml文件中完成此操作的方法。到目前为止我发现的所有例子都使用固定的宽度和高度,但这意味着当窗口大小改变时,元素将保持其预设大小。将QML元素锚定到窗口

回答

3

针对您的具体问题:

  1. 所有基于他们的父母(兄弟姐妹)的元素。
  2. 总是让您的顶级qml elemnt填充查看器空间,如here所述。

添加到它。无论何时您需要做这样的调整,您都需要从一方到另一方告知几何变化。我的意思是,从qml到C++或从C++到qml。

告诉QML有关在上面的窗口大小调整:在QML

你的顶级父元素不会得到有关widget的调整的任何信号。你需要手动完成。

  1. 要获得信息顶部部件实际上已经重新大小,你需要实现resizeEvent功能。

  2. 每当你的实现被调用,您需要的信号,一些大小调整已经发生了QML侧,因此顶部QML家长也应该调整自己。

告诉C++约在顶部QML元素调整:

同样,你的C++部件将无法获得有关页首QML元素的大小调整的任何信号。您需要手动执行:

  1. 将C++端的类暴露给qml。
  2. 每当top qml元素发生变化时,调用此类的函数来通知此更改,并要求它调整顶部小部件的大小。

您可以了解这些方法的基本概念herehere

1

简单的答案,这是使用

Item { 
    anchors.fill: parent 
} 

这是equivelent到

Item { 
    anchors { 
    top: parent.top 
    left: parent.left 
    right: parent.right 
    bottom: parent.bottom 
    } 
} 

其中母公司是你想要的物品被内部固定的对象。虽然这通常是父母,但它在技术上可以固定在任何东西上。

我想补充一点,通常你静态大小的顶级元素,因为在一个QML应用程序的默认选项,应用程序窗口将大小根元素在你的主QML文件大小。如果你想做一些更棘手的事情,你需要修改为你的应用程序生成QDeclarativeView的C++。

+1

这对于其他元素内部的元素是正确的,但是当窗口调整大小时要调整根元素的大小,我必须将QDeclarativeView的调整大小模式设置为SizeRootObjectToView – svb 2013-02-20 08:41:29