2016-04-21 7 views
1

Ich kann keine Lösung dafür finden.Ich habe einen Dialog, der eine TextArea und Ok und schließen Schaltflächen hat.Wenn ich den Dialog öffnete, dann schließe es. Zurück-Taste funktioniert nicht auf Android. Warum ? Mein Code ist:QT/QML, nachdem Dialog geöffnet ist, funktioniert die Zurück-Taste unter Android nicht?

Dialog { 


    id: messagereject 



    Connections 
    { 
     target:process 
     ignoreUnknownSignals: true 
     onSuccessrejectwo: { 

      var task=stackView.get(0).currenttask; 
      task.color="red"; 
      task.enabled=false; 
      rejectreasontxt.text=""; 
     } 
    } 




    contentItem:ColumnLayout { 
     id:rejectlay 
     Layout.preferredHeight: rejectheadertxt.height+rejectreasontxt.height+dp(30) 

     Layout.preferredWidth: rejectheadertxt.width+dp(100) 

     spacing: dp(10) 
     ....... 
    ...... 
+0

http : //stackoverflow.com/questions/35777149/main-window-does-not-receive-events-after-modal-dialog-is-closed/35904458#35904458 – dtech

+0

Gehen Sie einfach für eine 'StackView' anstelle von' Dialog'. An dieser Stelle scheint Android Probleme mit der Rückkehr von Qt-Dialogen zu haben. – dtech

Antwort

1

Ich lief in das gleiche Problem selbst heute. In meiner App möchte ich einen Dialog mit einem TextField verwenden, damit der Benutzer den Titel einiger Elemente bearbeiten kann.

Das Problem bei der Verwendung von Dialog in QML scheint zu sein, dass es auch nach dem Schließen des Dialogfelds den Tastaturfokus beibehält und daher auch die Zurück-Schaltfläche erfasst.

Für mich war die Lösung, um sicherzustellen, dass nach dem Dialog (dh seine visible Eigenschaft auf false), aktiver Tastaturfokus Gabe zurück zum „Hauptfenster“ geschlossen wurde:

import QtQuick 2.5 
import QtQuick.Controls 1.4 
import QtQuick.Dialogs 1.2 

ApplicationWindow { 
    id: mainWindow 

    width: 200 
    height: 150 
    visible: true 

    FocusScope { 
     id: rootItem 

     anchors.fill: parent 

     Label { 
      id: label 

      text: qsTr("Hello World") 
      anchors.centerIn: parent 
     } 

     Button { 
      text: qsTr("Edit") 
      anchors { 
       right: parent.right 
       bottom: parent.bottom 
       margins: 10 
      } 

      onClicked: { 
       edit.text = label.text; 
       dialog.open(); 
       // Let the TextField gain keyboard focus. This also 
       // means the main window no longer gets keyboard input 
       // so from here on input (including the back button) 
       // is handled by the dialog: 
       edit.forceActiveFocus(); 
      } 
     } 
    } 

    Dialog { 
     id: dialog 

     standardButtons: StandardButton.Ok | StandardButton.Cancel 

     onAccepted: label.text = edit.text 
     onVisibleChanged: { 
      if (!visible) { 
       // Force some item in the main window (in our case the "root item") 
       // to gain active focus: 
       rootItem.forceActiveFocus(); 
      } 
     } 

     TextField { 
      id: edit 
     } 
    } 
} 
+0

Das ist richtig. ForceActiveFocus-Funktion löst dieses Problem –

Verwandte Themen