Название: Как получить id текущего объекта/кнопки Отправлено: vebmaster от Декабрь 14, 2016, 19:55 Имеется кнопка, необходимо получить id текущей нажатой кнопки. Кнопки будут генерироваться динамически и возможности прописать id нет.
Как вариант this.id - но он не работает, может кто знает? :) Код: property string pageid Название: Re: Как получить id текущего объекта/кнопки Отправлено: navrocky от Декабрь 15, 2016, 09:36 Сам по себе id существует только на этапе парсинга QML, далее он нигде не хранится, движок оперирует указателями на объекты.
Соответственно для динамически создаваемых объектов id не существует в принципе. Поэтому его получить нельзя. Объясните задачу, зачем вам понадобилось получать id? Есть objectName который можно назначать и запрашивать.. Так-же если нужен уникальный идентификатор объекта в виде строки, то можно просто привести this к строке: Код: QtObject { Вывод: qml: QObject(0x2390030) Название: Re: Как получить id текущего объекта/кнопки Отправлено: vebmaster от Декабрь 15, 2016, 14:08 Спасибо за разъяснения.
Ну если коротко, то: имеется StackView. На 1 экране будут расположены 52 кнопки. На 2 экране будет вложен через Loader{} файл соответствующий иду нажатой кнопки, 52 кнопки = 52 файла qml. В ручную создавать не хочу, поэтому хочу получить id нажатой кнопки и по иду вложить файл (source: "page-"+pageid+".qml") Возможно есть и другое решение. Но если ид не получается взять, тогда создать все кнопки в ручную. Название: Re: Как получить id текущего объекта/кнопки Отправлено: vebmaster от Декабрь 15, 2016, 17:05 решил задачу через поле text самой кнопки.
Код: Button { Название: Re: Как получить id текущего объекта/кнопки Отправлено: navrocky от Декабрь 15, 2016, 22:49 На 1 экране будут расположены 52 кнопки. На 2 экране будет вложен через Loader{} файл соответствующий иду нажатой кнопки, 52 кнопки = 52 файла qml. Ужас какой :o 1) Почему не ListView/GridView с делегатом-кнопкой и модель с настройками для каждой кнопки? 2) Эти 52 qml файла все разные? может быть это несколько разных с разными настройками? тогда настройки с именем файла поместить также в модель Да и вообще когда на экране 52 кнопки - это уже повод бить тревогу. В нормальном дружественном интерфейсе такого быть точно не должно Название: Re: Как получить id текущего объекта/кнопки Отправлено: kai666_73 от Декабрь 15, 2016, 23:01 Да и вообще когда на экране 52 кнопки - это уже повод бить тревогу. В нормальном дружественном интерфейсе такого быть точно не должно Если только это не интерфейс калькулятора ))Название: Re: Как получить id текущего объекта/кнопки Отправлено: vebmaster от Декабрь 16, 2016, 10:42 1) Почему не ListView/GridView с делегатом-кнопкой и модель с настройками для каждой кнопки? Не подумал, попробую, спасибо.2) Эти 52 qml файла все разные? может быть это несколько разных с разными настройками? тогда настройки с именем файла поместить также в модель Да, все файлы будут разные.Название: Re: Как получить id текущего объекта/кнопки Отправлено: vebmaster от Декабрь 16, 2016, 14:33 решил теперь вот так вопрос, через ComboBox
Код: ComboBox { Название: Re: Как получить id текущего объекта/кнопки Отправлено: Отражение луны от Декабрь 25, 2016, 02:53 Просто назначьте callbackи, это ж яваскрипт.
Название: Re: Как получить id текущего объекта/кнопки Отправлено: vebmaster от Декабрь 25, 2016, 12:31 Просто назначьте callbackи, это ж яваскрипт. это вы про какое сообщение? И куда их добавлять?Вопрос уже решён, но всё равно интересно. Название: Re: Как получить id текущего объекта/кнопки Отправлено: Отражение луны от Декабрь 25, 2016, 19:29 Суть в том, что вы вольны ввести в кнопку var атрибут, куда можно будет подставить функцию, которая выполнится при нажатии кнопки. Скажем:
Код: Button { Не уверен, можно ли ссылку на функцию передать через модель (скорее всего можно), но даже если нет: - можно хранить список функций в keyValue и вызывать их по indexу кнопки. - можно легко создавать и убирать кнопки через createObject, и там уж вам точно никто не помешает назначать кнопкам любые атрибуты. В вашем случае можно так же легко задать в качестве property для кнопки путь к нужному файлу, и пустить все через один обработчик. Значение этой property легко цепляется к модели, которая еще и выглядеть будет человеческим образом, то есть можно будет прямо в ней определить все пути. Вижу, об этом тут уже написали. Реализация зависит от результата, который нужно в итоге получить, я лишь накидал часть вариантов решения. Название: Re: Как получить id текущего объекта/кнопки Отправлено: vebmaster от Декабрь 25, 2016, 19:48 Komorebi, спасибо, тоже интересный вариант
Цитировать - можно хранить список функций в keyValue и вызывать их по indexу кнопки. откуда этот index взять? из модели?Название: Re: Как получить id текущего объекта/кнопки Отправлено: Отражение луны от Декабрь 25, 2016, 21:15 Он всегда есть в контексте делегата. Просто переменная.
Подробнее можно узнать тут: http://doc.qt.io/qt-5/qml-qtquick-repeater.html#delegate-prop Обратите внимание, что есть еще и modelData, которая так же отлично подходит к данной ситуации (и которой я никогда не пользовался) |