Название: qt analog of motif constraint resources Отправлено: programmer от Сентябрь 27, 2006, 11:57 Привет!
Qt 4.1.4 Есть ли возможность Qt виджетам в рантайме назначать и модифицировать какой то ресурс изначально не определенный в классе наподобии того как это делается в Motif с constraint resources? Хочется чтобы виджет имел набор свойств которыми может пользоваться родитель независимо от того кто родитель на самом деле. Спасибо! Название: qt analog of motif constraint resources Отправлено: bigirbis от Сентябрь 27, 2006, 14:20 Добавь в его состав пару контейнеров и аксессоров к ним - и будет тебе счастье.
Название: qt analog of motif constraint resources Отправлено: programmer от Сентябрь 27, 2006, 14:39 я не могу добавить ничего к целевым классам
целью моего вопроса было получить информацию есть ли какой то стандартный для qt механизм Название: qt analog of motif constraint resources Отправлено: bigirbis от Сентябрь 27, 2006, 15:22 Прямого механизма нет. Но можно написать свой класс, пронаследованный от QObject:
Код: class MyClass : public QObject Например: Код: MyClass * mc = new MyClass( someWidget ); И далее: Код: MyClass * mc = someWidget->findChild < MyClass * > (); Название: qt analog of motif constraint resources Отправлено: programmer от Сентябрь 27, 2006, 15:29 жаль что нельзя сделать нативно без перестройки классов
спасибо за ответ - все таки придется создавать контейнеры на стороне родительского класса Название: qt analog of motif constraint resources Отправлено: bigirbis от Сентябрь 27, 2006, 15:37 Можно создать всего один класс, который будет иметь всю необходимую функциональность. А потом создавать экземпляры и цеплять их к необходимым виджетам
Название: qt analog of motif constraint resources Отправлено: programmer от Сентябрь 27, 2006, 15:44 цеплять как wrapper насколько я понял?
Название: qt analog of motif constraint resources Отправлено: Dendy от Сентябрь 27, 2006, 15:47 В базовьІх классах Qt (QObject, QWidget) нет ничего лишнего, собственно ето и правильно. К ним всегда можно приклеить свой обьект со свойствами, которьІй будет автоматически удалён.
Например, вот способ прикрутить два параметра к совершенно любому уже созданному обьекту: Код:
И теперь из любой точки программьІ, в которой не видно обьявление класса MyProperties можно писать: Код: QObject * properties = get_widget_from_form()->findChild<QObject*>( "my_properties" ); Название: qt analog of motif constraint resources Отправлено: bigirbis от Сентябрь 27, 2006, 15:57 Зачем?
Код: MyClass * mc = new MyClass( someWidget ); В этом случае создается твой объект с родителем someWidget. mc будет застрелен при разрушении someWidget как child. В любом месте программы ты сможешь обратиться к данному объекту, если доступен someWidget. Код: MyClass * mc = someWidget->findChild < MyClass * > (); Вот собственно и все. добавлено спустя 2 минуты: Цитировать Например, вот способ прикрутить два параметра к совершенно любому уже созданному обьекту: Условия задачи, как я понимаю, несколько другие, требуется установить свойства для уже созданных классов без наследования. Название: qt analog of motif constraint resources Отправлено: Dendy от Сентябрь 27, 2006, 16:00 Цитата: "bigirbis" Условия задачи, как я понимаю, несколько другие, требуется установить свойства для уже созданных классов без наследования. Так наследования и нет, произвольньІе свойства цепляются к уже созданному ранее обьекту, пересмотри ещё раз код. Название: qt analog of motif constraint resources Отправлено: bigirbis от Сентябрь 27, 2006, 16:03 Пардон, осилил. Но это ничем не отличается от предложенного мной варианта.
Название: qt analog of motif constraint resources Отправлено: Dendy от Сентябрь 27, 2006, 16:15 Цитата: "bigirbis" Пардон, осилил. Но это ничем не отличается от предложенного мной варианта. Немного отличается. Тем, что не нужно знать тип обьекта с параметрами на етапе компилляции. :wink: Динамически устанавливать/получать параметрьІ через QVariant. Собственно, вариант немного медленнее будет работать, но, мне кажется, ето один из тех случаев где ето не критично. Название: qt analog of motif constraint resources Отправлено: bigirbis от Сентябрь 27, 2006, 16:34 Цитировать Динамически устанавливать/получать параметры; через QVariant. Судя по хелпу, набор параметров динамически не устанавливается. Название: qt analog of motif constraint resources Отправлено: Dendy от Сентябрь 27, 2006, 16:45 Цитата: "bigirbis" Цитировать Динамически устанавливать/получать параметры; через QVariant. Судя по хелпу, набор параметров динамически не устанавливается. ТьІ имеешь в виду мой пост или документацию? ПараметрьІ могут устанавливаться/получаться динамически. Дополню ранне написанньІй код: Код:
Название: qt analog of motif constraint resources Отправлено: bigirbis от Сентябрь 27, 2006, 18:36 Цитировать ПараметрьІ могут устанавливаться/получаться динамически. Имелось в виду то, что нельзя в рантайме добавлять новые виды свойств, кроме как через контейнеры. Название: qt analog of motif constraint resources Отправлено: Dendy от Сентябрь 27, 2006, 19:58 В принципе ето и правильно. Если в обьекте есть какой-то параметр, то подразумевается, что для етого же типа обьекта есть и методьІ использования етого параметра.
Если мьІ добавляем параметрьІ для уже существующего типа, то мьІ как будто бьІ создаём новьІй тип данньІх, не наследуясь от него. То-есть подразумеваем использование добавленньІх параметров. Если же есть необходимость динамического добавления произвольньІх параметров, то, логически подумать, ето нельзя расценивать как параметр обьекта. Правильнее понимать под етим - елемент контейнера, где сам контейнер - параметр обьекта. Так как обработка будет осуществляться над контейнером, а не над параметром. Название: qt analog of motif constraint resources Отправлено: programmer от Сентябрь 27, 2006, 20:53 Мне кажется гораздо логичней было бы вставить в QObject или QWidget изначально просто указатель на который при надобности можно повесить структуру в памяти или в крайнем случае добавить QList с пропертями
Может это конечно сказывается С-шный подход (я на С++ почти не пишу) но думаю так было удобнее да и уверен не я первый сталкиваюсь с такими проблемами. Не надо было бы городить производные классы. Название: qt analog of motif constraint resources Отправлено: Alex03 от Сентябрь 28, 2006, 05:44 ИМХО базовые объекты не должны обладать излишней функциональностью, особенно если она нужна в 0.001% случаев. :)
qt и так до памяти прожорлива. :) Название: qt analog of motif constraint resources Отправлено: bigirbis от Сентябрь 28, 2006, 08:38 To programmer
Читай посты внимательнее. Зачем базовым объектам встроенный указатель на void? Это же можно решить аттачментом объекта класса, пронаследованного от QObject. При чем, таких объектов можно зацепить столько... :shock: ИМХО, тебе надо изменить подход к написанию кода... Название: qt analog of motif constraint resources Отправлено: Dendy от Сентябрь 28, 2006, 12:22 Цитата: "programmer" Мне кажется гораздо логичней было бы вставить в QObject или QWidget изначально просто указатель на который при надобности можно повесить структуру в памяти или в крайнем случае добавить QList с пропертями. Такие рассуждения подходят для одноразовьІх решений, а так как обьектная система Qt претендует на универсальную, то в ней по понятньІм причинам нет ничего лишнего. В данном случае тебе нужно прикрепить свои данньІе и первое, чтобьІ тьІ сделал на месте Троллей - прицепил бьІ пустой указатель - на всяк случай, вдруг хто захочет - юзайте. Теперь посмотри на ситуацию, если бьІ вдруг так в Qt и бьІло. ТьІ пользуешься сторонними уже созданньІми обьектами и пьІтаешься привесить к ним свои данньІе через предоставляемьІй указатель. НО! Часть библиотеки, которой тьІ пользуешься уже прикрепила туда какие-то свои данньІе. Что делать? А как на счёт автоматического удаления, кто вьІзовет деструктор етих данньІх? Может добавить вместо указатея список указателей или некий хеш юзерских параметров, хранимьІх в QVariant? Но всё равно ето не решает проблему с автоматическим удалением и конфликтом параметров (по ключам), навешенньІх на один обьект от разньІх компонент. Навесить контейнер QList<QVariant>? И как в нём найти именно свои данньІе? Именно поетому система параметром создана универсально, без конфликтов - путём С++ наследования от обьектов. Поетому ничего лишнего (одноразового) в QObject нет. Если хочешь прицепить свои данньІе - можешь воспользоваться собственньІм хешем с поиском по указателю на обьект: Код: QHash<QObject*,MyCustomProperties> Процесс поиска можно ускорить механизмами Qt - отсеять ненужньІе обьектьІ с помощью qobject_cast. Название: qt analog of motif constraint resources Отправлено: Dendy от Октябрь 04, 2006, 05:51 Qt 4.2 Released!
Тролли видать перечитали ентот форум и решили помочь тебе в проблеме :D И так, теперь в QObject встроена такая вещь как Dynamic Properties: Цитировать In addition to properties defined using Q_PROPERTY in a class it is possible to dynamically add and remove properties to any QObject at run-time. If setProperty is called with a property not statically defined using Q_PROPERTY it is automatically added as dynamic property and its value is stored in the object. The value can be queried using the property() method, just like with static properties. Собсна, конфликт имён разрешён с помощью позволения установки своих параметров с именами, несовпадающими с уже предопределённьІми для данного типа. Дёшево и сердито. Название: qt analog of motif constraint resources Отправлено: programmer от Октябрь 05, 2006, 11:23 блин :(
я уже все сделал без этого с дочерними классами не могли добавить в 4.1.4 и все таки предложенный мной подход на 5 постов выше был правильный раз так и сделали :) Название: qt analog of motif constraint resources Отправлено: bigirbis от Октябрь 05, 2006, 11:27 Цитировать и все таки предложенный мной подход на 5 постов выше был правильный раз так и сделали Так скажем - шаг к WEB (XML) Название: qt analog of motif constraint resources Отправлено: programmer от Октябрь 05, 2006, 13:55 Дело в том что я писал кастомный контейнер и мне как раз надо было дампить в XML :)
Название: qt analog of motif constraint resources Отправлено: bigirbis от Октябрь 05, 2006, 16:09 В этом случае есть 2 варианта:
1 - Держать XML(DOM) дерево 2 - Держать QStandartItemModel - если надо держать в дереве QVariant |