2014-11-03 2 views
2

Мой код постоянно дает мне ReferenceError. Я попытался исправить это с помощьюReferenceError in qt quick controls tabview

tv.b1Text = " XD "

как в примере, но это не сработало. Как я могу исправить эту ошибку? Я считаю, что есть аналогичная проблема here.

Вот мой код:

Button { 
    id: b0 
    text:"b1's text" 
    onClicked: { 
     b1.text = " XD " 
    } 
} 
TabView { 
    id: tv 
    Tab { 
     id: tab1 
     grid { 
      Button{ 
       id: b1 
       text:"b1's text" 
       onClicked: { 
       //console.log(b1.text) 
       show_text() 
       } 
      } 
     } 
    } 
} 

ответ

3

У вас есть иерархию в месте здесь и специфические областей. Вы не можете получить доступ к id с, не подвергая их более высоким областям или, не пройдя через иерархию, но в правильно.

Давайте рассмотрим ваш TabView: он имеет один Tab элемент, который содержит Grid (я предполагаю grid элемент фактически Grid!), Который в свою очередь содержит Button вы хотите изменить. Если вы хотите получить доступ к нему из Buttonb0 вы должны:

  1. Выберите вкладку в tv
  2. Выберите содержащуюся item (через свойство с тем же именем) -> это Grid
  3. Выберите первый item из Grid (который является единственным, нашим Button)

Таким образом, в текущей настройке, правильный код, чтобы изменить года ур b1 текст из b0 обработчика clicked сигнала, состоит в следующем:

tv.getTab(0).item.children[0].text = " XD " 

Обратите внимание, что data[0] может быть использован вместо children[0] (см Item элемент документы). Как вы можете видеть здесь, вы переходите к иерархии для доступа к элементу QML, который необходимо изменить.


Как вы видели, предыдущий код является утомительным и подверженным ошибкам. A намного лучше подход будет использовать функцию aliasing, а также Javascript для улучшения общего результата; другие пользователи уже любезно advised you об этом.

+1

Похоже, что этот вопрос был поднят, потому что сглаживание тоже не работает. – ony

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