Russian Qt Forum

Qt => Вопросы новичков => Тема начата: gil9red от Июнь 14, 2013, 14:36



Название: Для чего нужен objectName()?
Отправлено: gil9red от Июнь 14, 2013, 14:36
Кроме как для findChildren() он где нибудь используется?  :)


Название: Re: Для чего нужен objectName()?
Отправлено: mutineer от Июнь 14, 2013, 14:48
В qml им можно пользоваться


Название: Re: Для чего нужен objectName()?
Отправлено: Bepec от Июнь 14, 2013, 14:52
ObjectName является уникальным идентификатором объекта. Типа GUID'а.


Название: Re: Для чего нужен objectName()?
Отправлено: Alex Custov от Июнь 14, 2013, 15:01
например, задавать стиль через CSS.


Название: Re: Для чего нужен objectName()?
Отправлено: kambala от Июнь 14, 2013, 16:58
можно в слоте sender() идентифицировать по objectName


Название: Re: Для чего нужен objectName()?
Отправлено: Igors от Июнь 14, 2013, 17:42
Кроме как для findChildren() он где нибудь используется?  :)
Странный вопрос - это базовая возможность. Доступ к контролу по адресу совсем не общий, и хранить адрес часто накладно. Нормальная ситуация - загрузка UI из ресурсов, как в нативных OS. Тогда адреса вообще изначально нет, как обратимся к контролу?


Название: Re: Для чего нужен objectName()?
Отправлено: tester64 от Июнь 14, 2013, 19:29
ObjectName является уникальным идентификатором объекта. Типа GUID'а.

Нет. Имена вполне могут быть одинаковыми.
findChildren("name") возвратит список объектов с именем "name".
findChild("name") возвратит первый найденный объект с именем "name". Поиск идёт по степеням отстояния в объектной иерархии, т.е. если имеется два одноимённых объекта, один - непосредственный потомок, а другой - "внучатый", то возвращён будет первый. Если отстояние одинаковое, то результат неопределён.

В какой-то мере это нечто среднее между именованием по id и name в html.


Название: Re: Для чего нужен objectName()?
Отправлено: lit-uriy от Июнь 15, 2013, 15:26
>Доступ к контролу по адресу совсем не общий,
А какой общий?
> и хранить адрес часто накладно.
Хранить адрес (4 байта) накладнее, чем хранить строку длинной Х байт?


Название: Re: Для чего нужен objectName()?
Отправлено: Igors от Июнь 15, 2013, 15:45
>Доступ к контролу по адресу совсем не общий,
А какой общий?
> и хранить адрес часто накладно.
Хранить адрес (4 байта) накладнее, чем хранить QString длинной Х*2 байт?
Здесь дело не в байтах.
Код
C++ (Qt)
edit1->setText("abc");
 
Все хорошо, но надо иметь edit1 который, вероятно, член класса. А теперь так
Код
C++ (Qt)
MyUitls::SetText(this, "edit_1", "abc");
// или еще лучше с константой
MyUitls::SetText(this, EDIT_1, "abc");  
 
Так надо написать SetText и вызов длиннее. Зато это можно использовать в любом окне (было бы имя). Можно находить первый видимый "edit_1". Можно делать операции в цикле напр для контролов имена которых начинаются с какой-то строки. Словом возможностей гораздо больше


Название: Re: Для чего нужен objectName()?
Отправлено: Day от Июнь 18, 2013, 14:04
Кроме как для findChildren() он где нибудь используется?  :)
Очень даже. Я в одном из проектов всем дочерним виджетам давал осмысленные имена. Например, для кнопок - имя функции. И обрабатывал все кнопки в одном месте. Для CheckBox-ов - обозначение места, куда помещать флажок (0, 1)  и т.д.
В общем, вы можете использовать objectName, как вам заблагорассудиться, и иногда это бывает и полезно, и красиво.