gpt4 book ai didi

显示 StackView 页面时 Qt QML 聚焦项目(TextField)

转载 作者:行者123 更新时间:2023-12-01 16:19:00 24 4
gpt4 key购买 nike

我想在加载 QML 文件时启用 TextField 焦点。但是,它不起作用。加载 TestUi.qml 文件后,我放了一些按钮及其 onClick() 方法,我做了 _recipientView.focus = true_,它工作正常。问题是第一次加载 View 时没有启用默认焦点。

TestUi.qml

import QtQuick 2.0
import QtQuick.Controls 2.1
import QtQuick.Layouts 1.0


Page {

function init() {
recipientView.focus = true;
}

TextField {
id: recipientView
Layout.fillWidth: true
font.pixelSize: 18
inputMethodHints: Qt.ImhNoPredictiveText | Qt.ImhEmailCharactersOnly
focus: true
placeholderText: "Email"

}
}

main.qml

onComposeBtnClicked: {
rootStackView.push(test)
test.init()
}

TestUi {
id: test
visible: false
}

最佳答案

编辑

Page 组件已经充当 FocusScope,因此只需要强制激活焦点即可。感谢您的意见。

StackView {
id: stackView
initialItem: firstPage

// Ensures the focus changes to your page whenever
// you show a different page
onCurrentItemChanged: {
currentItem.forceActiveFocus()
}
}

Page {
id: firstPage
visible: false

TextField {
// Explicitly set the focus where needed
focus: true
}
}

原答案

这仅仅是因为您使用 rootStackView.push(test)TestUi 插入堆栈。当您这样做时,焦点将被重置。这通常由 QFocusScope 处理。 ,哪个作用是记住被聚焦的Item,当QFocusScope重新获得焦点时将焦点交还给它。

在您的情况下,将 QFocusScope 添加到您的基本页面将能够在显示页面时正确恢复焦点:

StackView {
id: stackView
initialItem: firstPage
onCurrentItemChanged: {
currentItem.forceActiveFocus()
}
}

Page {
id: firstPage
visible: false
onFocusChanged: {
scope.focus = true
}
FocusScope {
id: scope
TextField {
focus: true
// ...
}
}
}

然后,如果您想在用户返回页面时(例如在弹出后)重置焦点,则可以使用页面处理程序 onVisibleChanged,而不是记住焦点所在的位置。但在那种情况下,FocusScope 可能有点矫枉过正。

有关信息,您还可以使用 StackView 属性 initialItem 来设置第一页。

这也是一种不相关的,但更喜欢 importing 最新版本的可用 QtQuick 组件。 QtQuick 版本将是 Qt 5.12 的 2.12。 QtQtcuik.Controls version ,但它们正在与该版本控制方案保持一致。

关于显示 StackView 页面时 Qt QML 聚焦项目(TextField),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42299117/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com