什么对象在QML中主动关注?

时间:2017-12-24 12:33:47

标签: qt qml focus qtquickcontrols2

我有一个带有QML的复杂GUI,但在某些情况下我失去了焦点,我不知道哪个对象有活动焦点。

是否有任何工具或方法可以搜索QML文件并找到重点对象?

1 个答案:

答案 0 :(得分:12)

我使用此行来查看哪个项目具有活动焦点:

Window {
    onActiveFocusItemChanged: print("activeFocusItem", activeFocusItem)
}

此代码通过打印出具有有效焦点的项目来响应Window ApplicationWindow属性的更改。来自Qt快速控制activeFocusItem1Window具有相同的属性,因为它们来自QT_LOGGING_RULES

要找出项目获得焦点的 ,您可以将qt.quick.focus = true环境变量设置为Button。这样可以记录Qt的内部焦点处理。尽管如此,输出可能有点棘手......

由于您正在使用Qt Quick Controls 2,因此值得注意的是,每个控件都有一个2属性,用于确定控件如何获得焦点。像Qt.StrongFocus这样的控件的默认值为focusPolicy,这意味着按钮在单击或标签后会获得焦点。如果您发现某个控件具有焦点且您不想要它,只需将其Qt.NoFocus设置为focusPolicy: Qt.NoFocus

<section class="hero is-halfheight upload-descr" style = "height: 37em">
        <div class="hero-body">     
            <div class="container">
                <div class="clearfix"></div>
                <hr class = "rm-descr-bar" style = "float: left;"></hr>
                <div class="clearfix"></div>
                <h1 class = "title">
                    Loren Ipsum
                </h1>
                <div class="content rm-has-medium-size">
                    <p class = "upload-descr-exp" aria-live = "polite" aria-atomic = "true">Lorem ipsum dolor sit amet, consectetur adipiscing<br />elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.<br />Ut enim ad minim veniam, quis nostrud exercitation<br />ullamco laboris nisi ut aliquip ex ea<br />ea commodo consequat. Duis aute irure dolor.</p>
                </div>
            </div>
        </div>
</section>