Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

Qt:Focus::NoFocus still takes focus



  • I have a keyboard widget that appears when an EditText is focused. I want it to disappear when anywhere other than the EditText is clicked. So I set,

    mainWindow().setFocusPolicy(Qt::StrongFocus);
    

    But, when I click on the Qframe that holds the keyboard, it disappears even though I've set the QFrame to Qt::NoFocus.

    <widget class="QFrame" name="keyboardFrame">
     <property name="focusPolicy">
       <enum>Qt::NoFocus</enum>
      </property>
    </widget>
    

    I've tried a different approach where I set the parent to Qt::StrongFocus and it's child to Qt:NoFocus, but it seems that the parent Qt::StrongFocus still propagates to its child. Any help would be much appreciated. Thanks!


  • Lifetime Qt Champion

    Hi
    Not sure why no focus is ignored. Normally it's not.
    Anyway, try to hook a slot to
    https://doc.qt.io/qt-5/qapplication.html#focusChanged
    and check what it changes to so we are sure it is the
    QFrame that is guilty.



  • Seems like the mainWindow is getting the focus. So, I set the frame to StrongFocus and I can later handle it to keep the keyboard up. However, now, if I have two Qt::StrongFocus objects, mainWindow & QFrame, the mainWindow gets the focus even if the frame is on top. Any way I can change it so the QFrame receives the focus?


Log in to reply