Russian Qt Forum
Май 04, 2024, 12:16 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Вопрос-загадка: сколько точек занимает Rectangle шириной 16?  (Прочитано 3420 раз)
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« : Октябрь 08, 2014, 00:16 »

Cреда запуска - обыкновенный PC с Win7. Наткнулся на какое-то непонимание того как работает Item::childAt(). А работает он одинаково в 5.2.1 и в 5.3.2, что наводит на мысль, что это сделано сознательно и я что-то недопонимаю. На сцене есть прямоугольник 16x10. Начинаем искать его с помощью childAt() продвигаясь по координате X, и продолжаем поиск после первой найденной точки до тех пор, пока ряд точек не закончится. Сколько вы думаете childAt() насчитает точек? 16? Нет, 17. И вопрос - почему так и что делать.
Код:

Код
Javascript
import QtQuick 2.0
import QtQuick.Window 2.0
 
Window {
   visible: true
   color: "steelblue"
 
   Item {
       id: rect
       anchors.fill: parent
 
       Rectangle {
           color: "red"
           x: 0
           y: 0
           width: 16
           height: 10
       }
   }
 
   Component.onCompleted: {
       var found = 0;
 
       for(var i = 0;i < 18;i++)
       {
           var block = rect.childAt(i, 0);
 
           console.log("" + i + ": " + block);
 
           if(block !== null)
               found++;
       }
 
       console.log("Found " + found);
   }
}
Записан
Bepec
Гость
« Ответ #1 : Октябрь 08, 2014, 01:42 »

Рамка у window мб?
Записан
Отражение луны
Гость
« Ответ #2 : Октябрь 08, 2014, 04:45 »

Дело в том, что childAt срабатывает, если передать ему непосредственно x объекта, даже если у этого объекта ширина == 0.  Вероятно, кто-то где-то использовал >=/<= вместо >/< для определения области объекта. Выглядит как баг, но не совсем понятно, для каких целей может использоваться подобный код.
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #3 : Октябрь 08, 2014, 11:04 »

Рамка у window мб?

Рамки в Rectangle по-умолчанию нет, к тому же в документации написано, что даже если бы она и была, то вот: "The width of the rectangle's border does not affect the geometry of the rectangle itself or its position relative to other items if anchors are used"
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #4 : Октябрь 14, 2014, 15:50 »

Вобщем это баг в Qt, записал им в трекер, поставили приоритет P3.
Записан
Отражение луны
Гость
« Ответ #5 : Октябрь 14, 2014, 21:37 »

Вобщем это баг в Qt, записал им в трекер, поставили приоритет P3.
Как я и писал выше. Чтобы не ждать - легко можно реализовать свой childAt с параметрами и возвратом)
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.061 секунд. Запросов: 23.