- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发一个 Qt (5.3) 桌面应用程序(带有 QML ui 的 C++ 核心),其主窗口是一个 ApplicationWindow
并且在某个时候启动 Dialog
s。由于 Windows 和 Mac OS X 之间对话框模态的使用存在差异(例如,关于对话框在 Mac OS X 上很少是模态的,但在 Windows 上几乎总是模态的),并且在呈现某些对话框内容的方式上也存在差异,我'我们更改了设计以允许实现特定于平台的对话框版本。
因此我创建了以下DialogLoader:
Loader {
id: dialogFactory
property string dialogName
function platformFolder() {
if (Qt.platform.os === "osx")
return "osx"
return "win"
}
onDialogNameChanged: { source = platformFolder() + "/" + dialogName + ".qml" }
onStatusChanged: {
if (dialogFactory.status === Loader.Error)
console.log("DialogFactory: failed to load file: " + source);
else if (dialogFactory.status === Loader.Ready)
console.log("DialogFactory: file \"" + source + "\" loaded")
}
}
我使用如下:
ApplicationWindow {
// …
property alias aboutDialog: aboutDialogLoader.item
// …
DialogLoader { id: aboutDialogLoader; dialogName: "AboutDialog" }
// …
Action { text: qsTr("About..."); onTriggered: aboutDialog.show() }
// …
}
这种方法运行良好,它满足我的需求,除了一件事:Windows 上的模态对话框的行为与我直接在 ApplicationWindow
中声明它们时的行为不同。如果应用程序在模式窗口打开时失去焦点并再次授予焦点,则模式窗口会出现在主窗口后面,从而导致应用程序无法运行。
经过一些研究,我意识到问题的原因是使用加载程序方法时,ApplicationWindow
没有充当Dialog
的 transient 父级。
我找到了解决此问题的方法,方法是在发生这种情况时手动将对话框置于前面:
MainWindow {
// ...
onActiveChanged: {
if (Qt.platform.os === "windows") {
if (active) {
// ...
if (aboutDialog.visible) {
aboutDialog.requestActivate()
}
// ...
}
}
}
// ...
}
但我认为,如果可能的话,最好避免这种解决方法。在深入研究 Qt 文档但没有任何运气后,我决定发布这个问题,可以按如下方式恢复:是否可以更改 QML 窗口的 transient 父窗口?如果是这样,请您指出如何实现?
欢迎提出有关可以避免重复内容的不同方法的建议。
最佳答案
我想这是不可能的。至少在 Qt 5.4 中是这样。
来自文档(QML 类型“Window”的默认属性“data”)
data : list The data property allows you to freely mix visual children, resources and other Windows in a Window.
If you assign another Window to the data list, the nested window will become "transient for" the outer Window.
If you assign an Item to the data list, it becomes a child of the Window's contentItem, so that it appears inside the window. The item's parent will be the window's contentItem, which is the root of the Item ownership tree within that Window.
If you assign any other object type, it is added as a resource.
It should not generally be necessary to refer to the data property, as it is the default
property for Window and thus all child items are automatically assigned to this property.
由于 QML 绑定(bind)限制,“窗口”的所有动态创建似乎都有错误的 transient 父级。所有 QML 列表元素均不可修改。因此,不建议使用具有属性绑定(bind)的列表。如果它发生变化,您将永远不会收到通知信号。因此,我猜想,QML 引擎永远不知道新的 QML 元素是“Window”类型,并且有必要将其添加到 Windows 层次结构中。
来自文档 (https://www.ics.com/files/qtdocs/qml-list.html):
A list property cannot be modified in any other way. Items cannot be dynamically added to or removed from the list through JavaScript operations; any push() operations on the list only modify a copy of the list and not the actual list. (These current limitations are due to restrictions on Property Binding where lists are involved.)
也许这是一个错误,也许是一个功能。无论如何,目前不可能使用适当的 transient 父级动态加载“窗口”类型。
我发现的最佳解决方法 - 使用modality: Qt.ApplicationModal作为对话框。
关于qt - 如何更改 QML 对话框/窗口的 transient 父级?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23730153/
我知道这个问题已经被问过很多次了,但我找不到适合我的答案。 我在 Spring Roo 应用程序中有两个实体,它们处于多对多关系、发布和组件中。 首先,我通过以下方式获取现有版本的实例 selecte
我正在尝试将用户详细信息存储到下表中:user、role、user_role。尝试保存详细信息时,它会引发以下错误。 Error during managed flush [org.hibernate
我有两个 hibernate 实体 Coupon 和 CouponHistory,在 CouponHistory 和 Coupon 之间具有单向关系。 @Entity @Table(name = "v
我在外键 dimension_id 之一的表中有表 product。所以在服务层编写我的测试用例时它显示了错误。 这是我的测试用例 @Transactional(propagation = Propa
在 ARM 架构手册中提到缓存可以是 transient 的和非 transient 的,并且它是由实现定义的。我无法理解关于缓存的 transient 内存的概念和使用。我正在尝试编写启用 MMU
我有 2 个域模型和一个 Spring REST Controller ,如下所示: @Entity public class Customer{ @Id private Long id; @OneT
我知道这个问题在Stackoverflow中有很多问题,但是即使有很多答案,这些答案也帮不了我什么,也没有找到答案。 在我的WebAPP中,它可以正常工作,但是当我将其转换为API时,它失败了(主题标
我有以下域名 class User { Boolean accountLocked String password Boolean passwordExpired Bo
我写了一个 elisp 宏,在 transient-mark-mode 中保留区域: (defmacro keep-region (command) "Wrap command in code t
这是我的员工类(class): @Entity public class Employee { @Id @GeneratedValue private int id; private String f
我正在通读 Windows Phone 7.5 Unleashed,有很多代码看起来像这样(在页面的代码隐藏中): bool loaded; protected override void OnNav
我有一个自连接员工实体类,其中包含与其自身相关的 id、name 和 ref 列。我想创建它的新实例并将其保存到数据库。 首先我创建了一个 Employee 类的实例并将其命名为 manager。然后
我有一个用于添加新公寓的表单,在该表单中我有一个下拉列表,用户可以在其中选择负责的人员。 显然,当您从下拉列表中选择并尝试保存公寓时,我的应用程序认为该人已被修改。它给了我下面的错误,指示我应该首先保
我正在尝试保存一个复杂的对象,该对象内部有许多引用元素,而且它在大多数情况下都能完美运行。 但是在某些情况下,我们会遇到以下异常, object references an unsaved trans
我遇到了一些可能的问题答案,但这是关于从 Hibernate 3.4.0GA 升级到 Hibernate 4.1.8 的问题。所以这曾经在以前的版本下工作,我已经四处搜索了为什么它在这个新版本中出现了
似乎一遍又一遍地问这个问题,我仍然找不到解决我问题的答案。我在下面有一个域模型。每个新创建或更新的“安全用户”都需要我确保其具有配置文件,如果没有,则创建一个新的配置文件并分配给它。 配置文件的要求相
我很难调试为什么 JPA 不级联我的 @ManyToMany 关系。我发现的所有答案都与缺少级联语句有关。但我确实拥有它们并且仍然得到: Caused by: org.hibernate.Transi
例如,当我使用 transient 通过更改 translate(x, y) 的值来实现 2s 持续时间的动画时。如何获取0.5s时刻translate(x, y)的当前值? 最佳答案 我认为你做不到
我在尝试保存属于多对多关联的对象时收到 TransientObjectException。我有点理解为什么会这样,但想了解如何正确完成我正在尝试做的事情。 简而言之,我正在尝试做的事情: 我的应用程序
transient final int 和 transient final Integer 有什么不同。 使用 int: transient final int a = 10; 序列化前: a = 1
我是一名优秀的程序员,十分优秀!