c++ - QT 5.10 文档中关于 Qt Quick 键盘焦点的错误?

标签 c++ qt qtquick2 qt-quick

我正在阅读 Qt 文档以了解 Qt Quick 中的键盘焦点!我运行文档中的代码。但是,结果与文档不同!代码如下。

主.qml

//Window code that imports MyWidget
Rectangle {
id: window
color: "white"; width: 240; height: 150

Column {
    anchors.centerIn: parent; spacing: 15

    MyWidget {
        focus: true             //set this MyWidget to receive the focus
        color: "lightblue"
    }
    MyWidget {
        color: "palegreen"
    }
}

MyWidget.qml

Rectangle {
  id: widget
  color: "lightsteelblue"; width: 175; height: 25; radius: 10; antialiasing: 
  true
  Text { id: label; anchors.centerIn: parent}
  focus: true
  Keys.onPressed: {
      if (event.key == Qt.Key_A)
          label.text = 'Key A was pressed'
      else if (event.key == Qt.Key_B)
          label.text = 'Key B was pressed'
      else if (event.key == Qt.Key_C)
          label.text = 'Key C was pressed'
   }
}

pic1 是结果表单文档。 pic2 是我运行的结果,我只是从文档中复制代码并运行它。

图1 pic1

图2 pic2

这是一个错误吗?为什么结果不同?

医生说:

我们希望第一个 MyWidget 对象获得焦点,因此我们将其 focus 属性设置为 true。但是,通过运行代码,我们可以确认第二个小部件获得了焦点。

同时查看 MyWidget 和窗口代码,问题很明显 - 有三种类型将 focus 属性设置为 true。两个 MyWidgets 将焦点设置为 true,窗口组件也设置焦点。最终,只有一种类型可以拥有键盘焦点,系统必须决定哪种类型获得焦点。当创建第二个 MyWidget 时,它会获得焦点,因为它是最后一个将其焦点属性设置为 true 的类型。

我的问题:

1.为什么结果不同?在我的结果中,第一个小部件获得了焦点。

2.还有,doc中的"because it is last type to set its focus property to true"是什么意思?

您可以从这里获取文档! Qt doc

最佳答案

当我运行代码时,我得到了与您相同的结果,但这并不重要。这里的要点是要理解,如果没有 FocusScope,您将无法控制哪个对象从系统获得焦点(您无法保证 QML 对象的创建顺序)。

您是否尝试在第二个 MyWidget 上设置 focus: true?如果您尝试,键盘事件仍将由第一个小部件接收,除非您使用 FocusScope

请注意,您还可以从 MyWidget.qml 中删除 focus: true,您甚至不需要手动添加 FocusScope(它将自动由申请窗口)。

关于c++ - QT 5.10 文档中关于 Qt Quick 键盘焦点的错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48818049/

相关文章:

qml - 此 QML 示例中的边距从何而来?

linux - Qt中的键盘输入

linux - 如何将 qt5 添加到我的 openembedded 构建中?

c++ - & 一个变量

c++ - OpenCV 中函数 "normalize"中这行代码的语法是什么?

c++ - QtCreator 返回错误 "Cannot change to working directory"

qt - 更改 QML ListView 的模型不会更改相应的委托(delegate)

c++ - QML TreeView 在向模型添加新数据后未在运行时更新

c++ - 为什么要在类定义中使用指针?

c++ - 链接寄存器 (LR) 是否受内联或裸函数影响?