2015-03-31 5 views
1

Рассмотрим следующий пример.Силовой фокус на TextEdit в ListView

Rectangle { 
    height: 200 
    width: 200 
    ListView { 
     id: lv 
     anchors.fill: parent 
     model: ListModel { 
      ListElement { 
       name: "aaa" 
      } 
      ListElement { 
       name: "bbb" 
      } 
      ListElement { 
       name: "ccc" 
      } 
     } 
     delegate: TextEdit { 
      id: delegate 
      text: name 
      width: 200 
      height: 100 
      activeFocusOnPress: false 
      onActiveFocusChanged: { 
       if(activeFocus) { 
        font.italic = true; 
       } else { 
        font.italic = false; 
       } 
      } 
      MouseArea { 
       anchors.fill: parent 
       onDoubleClicked : { 
        delegate.focus = true; 
        lv.currentIndex = index; 
       } 
      } 
     } 
    } 
} 

Я бы хотел, чтобы активировать TextEdit двойным щелчком. Если он находится вне списка, он работает так, как ожидалось, но в режиме просмотра списка он не работает. Я думаю, проблема в том, что просмотр списка - это область фокуса, но я не знаю, как это исправить.

Заранее спасибо.

ответ

1

Вы можете использовать forceActiveFocus:

Этот метод устанавливает фокус на элементе и гарантирует, что все объекты предок FocusScope в иерархии объектов также приведены фокус.

Вы можете использовать перегруженную версию (без параметров) или одну с FocusReason. Ниже приведена измененная версия вашего кода с использованием последней. Я также сделал две небольшие корректировки с пояснительным комментарием:

import QtQuick 2.4 
import QtQuick.Window 2.2 

Window { 
    visible: true 
    width: 200 
    height: 200 

    ListView { 
     anchors.fill: parent 
     model: ListModel { 
      ListElement { 
       name: "aaa" 
      } 
      ListElement { 
       name: "bbb" 
      } 
      ListElement { 
       name: "ccc" 
      } 
     } 
     delegate: TextEdit { 
      text: name 
      // In the delegate you can access the ListView via "ListView.view" 
      width: ListView.view.width 
      height: 50 
      activeFocusOnPress: false 
      // directly bind the property to two properties (also saving the brackets) 
      onActiveFocusChanged: font.italic = activeFocus 

      MouseArea { 
       anchors.fill: parent 
       onDoubleClicked : { 
        parent.forceActiveFocus(Qt.MouseFocusReason) 
        parent.ListView.view.currentIndex = index 
       } 
      } 
     } 
    } 
} 
+1

спасибо, это сработало –

 Смежные вопросы

  • Нет связанных вопросов^_^