QML 无法隐藏矩形
QML can't hide Rectangle
我有一个窗口包含我称之为页面的矩形,大小与主窗口相同:
LoginWindow {
id: loginWindow
}
SelectionWindow {
id: selectionWindow
}
ServiceWindow {
id: serviceWindow
}
ConfirmWindow {
id: confirmWindow
}
IssueWindow {
id: issueWindow
}
这里的每个*Window都是继承自Page的元素。
现在我可以在不同的页面元素之间跳转设置它们的可见性。一次只能显示一个页面。最后一页是IssueWindow,从那里我想切换回LoginWindow并注销用户。
从c++中我发出一个信号issueFinished,在MainWindow中我有这样的代码:
onIssueFinished: {
// This line won't hide the Page
issueWindow.visible = false;
loginHandle.logout();
}
正如评论中提到的,Page元素不会隐藏,而其他元素会改变它们的可见性。我正在使用GammaRay来查看变化和一切工作,只是隐藏问题窗口没有。在打印问题窗口时也是如此。
使用不透明度而不是可见性,并绑定一个不透明度更改方法,该方法处理启用和禁用状态,如
onIssueFinished: {
// This line won't hide the Page
issueWindow.opacity = 0.0;
loginHandle.logout();
}
IssueWindow {
id: issueWindow
onOpacityChanged: {
enabled = ( opacity === 1.0)
}
}
你需要在所有窗口中实现不透明度的改变。并设置所有其他窗口的不透明度。
发现问题实际上是切换可见性和发射信号并响应它们的顺序不正确。
为了确保只有一个Page可见,您可以使用索引。您将可见性设置为:
visible: (selected == thisPageIdentifier)
这样可以确保只有具有相应pageidentifier的页面是可见的,并且您不必使用多个信号来显示和隐藏。
当一个新的页面变为可见时,只需将selected
属性设置为相应的标识符(int或string或其他什么),其他页面变为不可见。
这将提高可伸缩性,因为如果您决定添加一个新页面,则无需在所有其他页面中处理新信号。您只需要确保标识符是唯一的。
您的示例代码调整为:
Item {
property int selection: 0
LoginWindow {
id: loginWindow
visible: (selection === 0)
}
SelectionWindow {
id: selectionWindow
visible: (selection === 1)
}
ServiceWindow {
id: serviceWindow
visible: (selection === 2)
}
ConfirmWindow {
id: confirmWindow
visible: (selection === 3)
}
IssueWindow {
id: issueWindow
visible: (selection === 4)
}
}
相关文章:
- 从C++实例化QML
- 使用CMake创建QML插件
- QT通过C++添加映射QML项目
- 如何在没有信号的情况下从C++执行QML插槽
- 这是我尝试让用户将值输入到数组中.然后将其隐藏为大量的星号
- QML按钮点击功能执行顺序
- QML:修改在不同QML文件(而非main.QML)中定义的子对象的属性
- 建议在运行时将带有类实例的列表从c++导入qml
- Qt Quick-如何仅从c++代码与qml属性交互
- 结构和双指针隐藏在其他结构中,多层混淆
- 如何将带有自定义对象的容器从C++传递到QML
- 在 cpp 文件中隐藏采用模板参数引用的方法
- QML 使用带有参数C++函数
- 最佳做法是从另一个线程访问 qml 中的Q_PROPERTY
- 如何从C++端挂接到 QML 项的 onClick 事件
- 在 qml 中使用 Q_ENUM 和 Q_PROPERTY 作为枚举类
- 参数包构造函数在类模板中隐藏用户定义的转换
- 如何隐藏最大化和最小化按钮并在qml应用程序窗口中显示关闭按钮?
- 如何将光标隐藏在QML中
- QML 无法隐藏矩形