![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
alexandr_ps |
![]()
Сообщение
#1
|
Новичок Группа: Новичок Сообщений: 3 Регистрация: 9.2.2009 Пользователь №: 537 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Добрый день.
Возникла следующая проблема. На форме используется собственный виджет, у которого есть свое свойство (property) отличное от свойств QWidget. Написан дополнительный диалог, который с помощью каких-то манипуляций формирует значение этого свойства (использовалось QDesignerTaskMenuExtension). Мне нужно чтобы значение этого свойства сохранялось в ui-файле, как и все другие свойства виджета. Вызов метода setProperty() меняет свойство только у объекта, ни в PropertyEditor'е в Designer'е, ни при сохранении в ui-файле изменение не происходит. В связи с этим вопрос, что делать? ![]() Смотрю на QDesignerPropertySheetExtension, но этот класс позволяет переписать стандартный PropertyEditor(как я понял, если неправ - поправьте пожалуйста), а мне всего лишь нужно чтобы свойство сохранилось в ui-файле. Неужели нет других вариантов? Заранее спасибо! |
|
|
Litkevich Yuriy |
![]()
Сообщение
#2
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
А ты пример TicTacToe смотрел?
Я попробовал поменять свойства этого виджета в дизайнере, они сохраняются в ui-файле. |
|
|
alexandr_ps |
![]()
Сообщение
#3
|
Новичок Группа: Новичок Сообщений: 3 Регистрация: 9.2.2009 Пользователь №: 537 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Спасибо, пример натолкнул на решение. Позже отпишусь как это было
![]() |
|
|
alexandr_ps |
![]()
Сообщение
#4
|
Новичок Группа: Новичок Сообщений: 3 Регистрация: 9.2.2009 Пользователь №: 537 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
В общем, может кому-то это тоже понадобится, поэтому привожу решение.
Как оказалось значение свойства записывается в ui-файл, если оно находится в PropertyEditor'е. Соответственно если вы хотите, чтобы ваше свойство сохранилось - вы должны добавить его в PropertyEditor, если его там нет, а затем поменять его значение на нужное вам. В примере TicTacToe использовался вариант:
Но проблема в том, что у них в примере сохраняемое свойство - статическое, а мне хотелось чтобы оно было динамическим. Поэтому воспользовался такой конструкцией. В конструкторе Extension'а получаю объекты классов расиширений:
propertySheet - для работы со статическими свойствами, dynamicPropertySheet - с динамическими. где manager - менеджер расширений QExtensionManager * , ну а widget - непосредственно сам виджет. Ну а далее добавил 2 метода:
PROPERTY_NAME - имя property, в котором я сохраняю свою информацию Кстати когда ваше динамическое свойство сохранится в файле, при загрузке файла сохраненное свойство будет уже статическим. Вроде все работает. P.S. Смущает только одна вещь - propertySheet = qt_extension<QDesignerPropertySheetExtension*>(manager, widget). По документации функция qt_extension должна вернуть мне объект класс QDesignerPropertySheetExtension* или его наследника. Этот класс абстрактный, а описания его наследников я в доке на нашел. При этом у меня этот объект создается(!) и даже(!) запускает его функции, которые помечены как чисто виртуальные. В документации кстати тоже призывают так делать, в связи с чем вопрос как это все работает? |
|
|
![]() ![]() ![]() |
![]() |
Текстовая версия | Сейчас: 27.2.2025, 20:22 |