Russian Qt Forum

Qt => Qt Quick => Тема начата: Alex Custov от Октябрь 08, 2014, 00:16



Название: Вопрос-загадка: сколько точек занимает Rectangle шириной 16?
Отправлено: Alex Custov от Октябрь 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);
   }
}


Название: Re: Вопрос-загадка: сколько точек занимает Rectangle шириной 16?
Отправлено: Bepec от Октябрь 08, 2014, 01:42
Рамка у window мб?


Название: Re: Вопрос-загадка: сколько точек занимает Rectangle шириной 16?
Отправлено: Отражение луны от Октябрь 08, 2014, 04:45
Дело в том, что childAt срабатывает, если передать ему непосредственно x объекта, даже если у этого объекта ширина == 0.  Вероятно, кто-то где-то использовал >=/<= вместо >/< для определения области объекта. Выглядит как баг, но не совсем понятно, для каких целей может использоваться подобный код.


Название: Re: Вопрос-загадка: сколько точек занимает Rectangle шириной 16?
Отправлено: Alex Custov от Октябрь 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"


Название: Re: Вопрос-загадка: сколько точек занимает Rectangle шириной 16?
Отправлено: Alex Custov от Октябрь 14, 2014, 15:50
Вобщем это баг в Qt, записал им в трекер, поставили приоритет P3.


Название: Re: Вопрос-загадка: сколько точек занимает Rectangle шириной 16?
Отправлено: Отражение луны от Октябрь 14, 2014, 21:37
Вобщем это баг в Qt, записал им в трекер, поставили приоритет P3.
Как я и писал выше. Чтобы не ждать - легко можно реализовать свой childAt с параметрами и возвратом)