2016-08-05 35 views
1

Ich möchte ein bestimmtes Steuerelement erstellen, um den Fokus innerhalb eines TabViewTab zu erhalten. Es scheint, dass der Erste den Fokus bekommt, egal was ich mache. Ich habe versucht, überall focus:false Einstellung, aber es funktioniert nicht.QT 5.7 QML Wie kann ich steuern, welche Steuerung den Fokus innerhalb eines TabViews erhält?

Betrachten Sie den folgenden Code. Ich habe eine einfache Spalte mit zwei RadioButton s und einem TextField. Ich möchte mich für TextField arrangieren immer Fokus zu erhalten, wenn die Registerkarte ausgewählt ist, aber es geht immer auf die erste RadioButton

import QtQuick 2.7 
import QtQuick.Controls 1.4 
import QtQuick.Controls.Styles 1.4 
import QtQuick.Layouts 1.3 

ApplicationWindow 
{ 
    visible: true 
    width: 800 
    height: 400 

    TabView 
    { 
     anchors.fill: parent 

     Tab { title: "tab1"; sourceComponent: foo } 
     Tab { title: "tab2"; sourceComponent: foo } 
    } 

    Component 
    { 
     id: foo 
     ColumnLayout 
     { 
      spacing: 32 
      ExclusiveGroup { id: optionGroup } 

      RadioButton 
      { 
       // i always get the focus!! 
       exclusiveGroup: optionGroup 
       text: "Click me" 
       activeFocusOnPress: true 
       focus: false 
      } 

      RadioButton 
      { 
       exclusiveGroup: optionGroup 
       text: "No, click me!" 
       activeFocusOnPress: true 
       focus: false 
      } 

      TextField 
      { 
       // but i want the focus 
       placeholderText: "type here" 
       focus: true 
      } 
     } 
    } 
} 

Press „tab2“, das zu sehen,

enter image description here

ich versuchte innerhalb TabView zwingt durch Zugabe

onCurrentIndexChanged: getTab(currentIndex).item.forceActiveFocus()

Aber es macht keinen Unterschied.

Ich habe die Erklärung des Fokus gelesen, aber es hat in diesem Fall nicht geholfen.

Vielen Dank für jede Anregung oder Hilfe,

Antwort

0

wahrscheinlich ein Fehler. Versuchen Sie Qt Quick Controls 2.0 statt:

import QtQuick 2.7 
import QtQuick.Controls 2.0 
import QtQuick.Layouts 1.3 

ApplicationWindow { 
    visible: true 
    width: 800 
    height: 400 

    header: TabBar { 
     id: bar 
     width: parent.width 
     TabButton { 
      text: qsTr("tab1") 
     } 
     TabButton { 
      text: qsTr("tab2") 
     } 
    } 

    StackLayout { 
     anchors.fill: parent 
     currentIndex: bar.currentIndex 

     ColumnLayout { 
      id: columnLayout 
      spacing: 32 

      ButtonGroup { 
       id: optionGroup 
       buttons: columnLayout.children 
      } 

      RadioButton { 
       text: "Click me" 
      } 

      RadioButton { 
       text: "No, click me!" 
      } 

      TextField { 
       placeholderText: "type here" 
       focus: true 
      } 
     } 
    } 
} 
+0

Ich hoffte, dass Sie nicht sagen würde, dass :-) Ein dieses Problem von einem Körper der Kontrollen 1 Code einkalkuliert, dass ich nur ungern ändern. Ich werde Ihre Antwort jedoch versuchen und sehen, ob ich einige Controls 2 mischen kann, um es zu beheben. Vielen Dank. –

+0

Das ist die Antwort. Du hast Recht, es ist besser, ein 'StackLayout' zu verwenden. Tabview' hat mir nie wirklich gefallen, weil' Tabs 'Loader sind. Ich verwende Controls1 innerhalb des StackLayout und es funktioniert gut. Vielen Dank. –