Qt5更改小部件作为qml的一部分

时间:2015-04-25 09:41:15

标签: qt qml qt5

我有一个包含框架的屏幕(作为一个qml文件) - 它的内容作为单独的小部件存储在单独的文件中。目前它看起来像:

//screen qml
MyScreen
{
  ...
  //other stuff

  Widget1
  {
    visible: isWidget1Active
    ...
  }

  Widget2
  {
    visible: isWidget2Active
    ...
  }
}

//widget1 qml
Widget1
{
  //label  
  //button
}

//widget2 qml
Widget2
{
  //label
  //button1
  //button2
  //button3
}

小部件将覆盖相同的区域(但它们具有不同的内容),我想在同一时间只显示其中一个。 当然,我可以通过检查哪个小部件当前有效来改变可见性,但我不确定这是正确的方法。 我想要支持两个以上的小部件。在这种情况下,屏幕qml会更大,并且会有更多的条件。

是否可以切换小部件qml而不是为每个小部件设置可见性?

2 个答案:

答案 0 :(得分:0)

如果您希望在小部件之间使用功能完整导航,则可以使用StackView。另一种方法是使用ListView或其他视图Item,每次都会显示一个代表。

答案 1 :(得分:0)

我是通过使用loader并从c ++文件发送带有qml路径的字符串来实现的。

但是我有一个问题 - 我需要在屏幕上触发切换小部件内的功能。 Widget类的实例在MyScreen中不可见,因此我无法使用连接。

我可以通过对包含源路径的字符串发出更改来重新加载qml,但我必须执行两次 - 使用空字符串和正确的字符串(之前已设置) - 否则qml将不会重新加载。 这不是最好的解决方案,因为在这种情况下我只对构造函数有“访问权限” - 它将在qml重新加载后调用。我可以使用这种方法,但也许可以更好地做到这一点。