1

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

4

2 回答 2

3

对于您的具体问题:

  1. 根据父母(兄弟姐妹)锚定所有元素。
  2. 始终使您的顶级 qml 元素填充查看器空间,如此所述。

添加到它。每当您需要进行此类调整大小时,您需要从一侧到另一侧通知几何形状的变化。我的意思是,从 qml 到 C++ 或从 C++ 到 qml。

告诉 qml 在顶部窗口中调整大小:

您在 qml 中的顶级父元素不会收到有关调整小部件大小的任何信号。您需要手动完成。

  1. 要获取顶部小部件实际调整大小的信息,您需要实现resizeEvent函数。

  2. 每当您的实现被调用时,您需要向 qml 方发出信号,表明发生了一些调整大小,因此顶级 qml 父级也应该自行调整大小。

告诉 C++ 调整顶部 qml 元素的大小:

同样,您在 C++ 中的小部件不会收到任何关于调整顶部 qml 元素大小的信号。您需要手动执行此操作:

  1. 从 C++ 端向 qml 公开一个类。
  2. 每当顶部 qml 元素发生变化时,调用此类的函数来通知此更改,并要求它也调整顶部小部件的大小。

您可以在此处此处了解这些方法的基本概念。

于 2013-02-21T04:39:35.830 回答
1

对此的简单答案是使用

Item {
  anchors.fill: parent
}

这相当于

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

其中 parent 是您希望将项目锚定在其中的对象。虽然这通常是父级,但从技术上讲,它可以锚定到任何东西上。

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

于 2013-02-19T20:45:41.627 回答