LINUX.ORG.RU

[Qt] Q_PROPERTY & UI

 


0

1

Можно ли добавить свое свойство для виджета, заданного с помощью ui-файла?
т.е. как задать, например «Q_PROPERTY(int my_x READ getX WRITE setX)», внутри ui файла

★★★★★

А ui фаил не задает QObject. Он задает псевдо-структуру, которая уже накалдывается на QWidget

namezys ★★★★
()

Да можно добавить и прямо в самом Дизайнере. На панели Property Editor вверху есть кнопка «+». Выбираете контрол, которому добавить, имя параметра, тип, и оно появляется в самом низу списка параметров.

Dendy ★★★★★
()
Ответ на: комментарий от Dendy

это первое, что я попробовал - не вижу где задать свой сеттер\геттер ?
дизайнер из состава 4.6.3

x905 ★★★★★
() автор топика
Ответ на: комментарий от x905

Сеттеры и геттеры задаются только для С++ кода. Дизайнер всего-лишь наполняет интерфейс, а API для C++ вы строите сами. Следовательно, если вам из C++ нужно видеть геттер и сеттер - его нужно написать руками.

Dendy ★★★★★
()
Ответ на: комментарий от Dendy

жаль, что нельзя задать в ui свои свойства
в qt3 ui-designer был больше чем просто строитель интерфейса
наверно в qt4 многое надо делать по другому, но пока думал обойтись более простым решением - не вышло

x905 ★★★★★
() автор топика
Ответ на: комментарий от x905

> жаль, что нельзя задать в ui свои свойства

Свойства - можно, а вот С++-интерфейс к ним прийдётся писать руками. Такой принцип в Qt4 - или код пишет только машина или только человек. Да, в Qt3 дизайнер пытался править код, написанный чеорвеком, за что его многие тихо ненавидели.

Dendy ★★★★★
()

дык, это… в дизайнере добавить динамическое свойство виждету, в коде прочитать его с помощью my_widget->property(«my_property_name»)… или я не так понял вопрос?

arsi ★★★★★
()
Ответ на: комментарий от arsi

правильно, только вот виртуальность ф-и property убрали в 4й версии (
попробую событиями

x905 ★★★★★
() автор топика
Ответ на: комментарий от x905

хм… а какая разница, виртуальная она или нет? setProperty() — установить свойство, property() — получить свойство, installEventFilter() — установить обработчик событий, в т.ч. и уведомление об изменении динамического свойства… обычно этого вполне достаточно. для более сложных вещей делать наследование… подозреваю, что я совсем не понял, что вы хотите делать с динамическими свойствами %)

arsi ★★★★★
()
Ответ на: комментарий от arsi

есть набор виджетов (указатели на qwidget), от пары из них нужно получить некий перечень номеров, для этого (ранее, используя qt3) я переопределял метод property и виджет согласно своей логики отдавал набор номеров (как qvariant)
в qt4 property уже не виртуальна и я не «дойду» до своего виджета (через указатель на qwidget)

x905 ★★★★★
() автор топика
Ответ на: комментарий от x905

у каждого виджета (точнее, QObject-a) своя таблица динамических свойств. в том же дезайнере (или вручную через setProperty() в конструкторе) можно разным виджетам назначить свойство с одним и тем же именем но разными значениями. потом по указателю читать их через property()…

arsi ★★★★★
()
Ответ на: комментарий от arsi

для моих виджетов никто извне свойство не назначает, а он сам его должен сформировать и отдать во вне в момент запроса свойства

x905 ★★★★★
() автор топика
Ответ на: комментарий от x905

т.е. это не совсем QWidget, а производный от него класс, так? ну тогда ничего не мешает определить в производном классе свойство через Q_PROPERTY() и написать для него геттеры/сеттеры, а потом запрашивать его через QObject::property().

arsi ★★★★★
()
Ответ на: комментарий от arsi

вот я и хотел это через ui-файл сделать, чтобы сильно не ломать идеалогию работы с ui как привык в qt3 - но так не получается
руками писать весь производный класс (размещение внутренних виджетов) не вариант

x905 ★★★★★
() автор топика
Ответ на: комментарий от x905

> руками писать весь производный класс (размещение внутренних виджетов)

о_О зачем??

mywidget.h:

class MyWidget : public QWidget {
	Q_OBJECT
	Q_PROPERTY(int myProperty READ myProperty)
public:
	int myProperty() const { return qrand(); }
};

всё, дальше в дизайнере с этим виджетом можно работать как и с QWidget…

arsi ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.