将QML元素锚定到窗口

时间:2013-02-19 16:34:58

标签: python qt4 pyqt4 qml

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

2 个答案:

答案 0 :(得分:3)

针对您的具体问题:

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

  3. 添加它。无论何时需要进行这种重新调整,都需要从一方通知另一方关于几何变化的信息。我的意思是,从qml到C ++或从C ++到qml。

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

    qml中的顶级父元素不会获得有关调整窗口小部件大小的任何信号。你需要手动完成。

    1. 要获取顶部窗口小部件实际调整大小的信息,您需要实现resizeEvent功能。

    2. 每当你的实现被调用时,你需要向qml方面发出一些调整大小已经发生的信号,因此top qml parent也应该自己调整大小。

    3. 告诉C ++在顶级qml元素中调整大小:

      类似地,C ++中的小部件不会获得有关调整顶级qml元素大小的任何信号。您需要手动完成:

      1. 将一个类从C ++侧暴露给qml。
      2. 每当top qml元素发生更改时,调用此类的函数来通知此更改,并要求它调整顶部窗口小部件的大小。
      3. 您可以基本了解这些方法herehere

答案 1 :(得分:1)

对此的简单回答是使用

Item {
  anchors.fill: parent
}

等于

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

其中parent是您想要将项目锚定在其中的对象。虽然这通常是父母,但它在技术上可以锚定在任何东西上。

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