2017-05-18 3 views
0

j'avoir un comportement étrange qui me gênant lorsque je tente de faire ce code:Comportement étrange sur ComboBox lors de la lecture avec mise au point et popup.visible

import QtQuick 2.7 
import QtQuick.Controls 2.0 

ApplicationWindow { 
    id: window 
    visible: true 
    width: 640 
    height: 480 

    Rectangle { 
     color: "green" 
     width: parent.width/2 
     height: parent.height 
     anchors.right : parent.right 


     ComboBox { 
      id:combo 
      popup.visible: combo.activeFocus 
      model: [ "Banana", "Apple", "Coconut" ] 
     } 

    } 
    CheckBox { 
     id:check 
    } 
} 

Si je clique sur le CheckBox puis sur la ComboBox , le ComboBox.popupapparaît pendant 1 ms puis disparaît. Je ne comprends pas pourquoi parce que activeFocus = true

Avez-vous une idée pourquoi?

+0

Vous avez sélectionné quelque chose, alors popup.close() sera appelé, en réglant popup.visible = false. Qu'attendez-vous? – derM

+0

Que voulez-vous dire? J'ai sélectionné le 'ComboBox': Je clique sur le' CheckBox'. Ensuite, je clique sur le 'ComboBox'. J'ai donc choisi le 'ComboBox', donc l'accent est maintenant sur le' ComboBox'. Mais si doubleclick sur le 'ComboBox' au lieu de simplement cliquer, cela fonctionnera bien. –

+2

Ce genre de cas d'utilisation n'a tout simplement jamais été envisagé. Ce que je peux imaginer, c'est que ComboBox reçoit un événement de souris et le passe à l'implémentation de classe de base qui gère le focus. Le contrôle gagne le focus actif et le boom, le popup est ouvert. Ensuite, l'exécution revient au gestionnaire d'événements souris de ComboBox, qui active la visibilité de la fenêtre contextuelle comme elle devrait le faire dans des circonstances normales, et la fenêtre contextuelle est donc immédiatement fermée. Il peut être facilement résolu en interrogeant la visibilité de la fenêtre avant de faire la mise au point. N'hésitez pas à signaler un bug. – jpnurmi

Répondre

1

Ce comportement est à prévoir, si vous suivez la chaîne des événements qui y mènent:

  1. Vous cliquez sur les ComboBox
  2. Les ComboBox gains activeFocus
  3. Le ComboBox.popup devient visible
  4. Le clic est géré, pour basculer la visiblité -> les ComboBox deviennent invisibles.

Retirez la ligne

popup.visible: combo.activeFocus 

et vous êtes bien.

Contrôlez la visibilité via open() et close() à la place.

+0

Je pense que vous avez mal compris mon problème. C'est quand je clique sur ** sur ** le 'ComboBox' que le' Popup' apparaîtra, puis disparaîtra. Cela se produira ** seulement ** si j'ai cliqué sur le 'CheckBox' avant de cliquer sur le' ComboBox'. –

+0

Oui, j'ai mélangé quelque chose en lisant. Maintenant, cela devrait expliquer ce qui ne va pas. – derM

+0

Merci pour votre explication, je vais l'essayer demain ou lundi, selon quand je peux travailler sur le projet –