Не могу обратится к свойствам объекта |
Здравствуйте, гость ( Вход | Регистрация )
Не могу обратится к свойствам объекта |
kwisp |
9.4.2009, 15:48
Сообщение
#11
|
астарожна ынтжинэр Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: 23 |
|
|
|
igor_bogomolov |
9.4.2009, 16:30
Сообщение
#12
|
Профессионал Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: 29 |
может вы немного не поняли вопроса. Наверно действительно что то не так понимаю. Тем интереснее читать эту тему и попробовать разобраться. Всю информацию я почерпнул из асистента по классу QFormBuilder. В примере там идет явная загрузка из ui файла. Если посмотрите мой пример, у меня там никокого ui_ххх.h тоже нет. Загрузка идет из файла .ui Форму можно и не показывать, т.е. myWidget->show() убрать. Загружаю форму в виджет, добирабсь до кнопки, и запрашиваю ее свойство. Прошу поподробнее объяснить что я не понимаю, а то я на самом деле уже запутался. ------------------------------------------------ добавлено ----------------------------------------------- Еще раз перечитал тему и запутался просто окончательно. У объекта есть проперти. Q_PROPERTY( QStringList DefHeaders READ getDefHeaders WRITE setDefHeaders DESIGNABLE true USER true SCRIPTABLE true) в ui файле все заполнено и в дизайнере все показывается Замечательно. У QPushButton тоже есть проперти Q_PROPERTY(bool flat READ isFlat WRITE setFlat) В дизаенере я установил это свойство в true, что также отображается в ui файле <property name="flat"> <bool>true</bool> </property> читаю форму из файла А я что делаю? Так же читаю форму из файла.а я динамически создаю форму у меня ui_...h файла нет А я как создаю? Разве не динамически? ui_xxx.h у меня так же нет.Тем не менее я добираюсь до необходимого мне свойства, и вывожу его в консоль через QDebug. Теперерь буду весь день нервничать, пока мне не объяснят что я неправильно понимаю. Сообщение отредактировал igor_bogomolov - 9.4.2009, 16:56 |
|
|
heiheshang |
10.4.2009, 3:10
Сообщение
#13
|
Студент Группа: Новичок Сообщений: 10 Регистрация: 9.4.2009 Пользователь №: 666 Спасибо сказали: 0 раз(а) Репутация: 0 |
Вы добираетесь до свойства объекта, отлично, я пытаюсь обратится к свойству в конструкторе объекта который создается в процесе чтения из ui файла. В какой момент происходит присвоение свойств,может в конструкторе объекта еще свойства не существуют, надо их считывать после создания объекта ?
в файле ui такой кусок.
|
|
|
Litkevich Yuriy |
10.4.2009, 8:07
Сообщение
#14
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
heiheshang, пользуйся тэгом code, справка
heiheshang, я ровным счётом ничего не понял. Есть класс wMay, который является только лишь наследником QWidget, у него свойство DefHeaders, причём здесь свойства в ui-файла, который неотносится к этому класу никоим образом? Приведи код функций getDefHeaders, setDefHeaders и объявление класса. я так понимаю, ты хочешь сделать виджет-плагин для дизайнера. И возникает проблема при использовании этого виджета в последствии. |
|
|
kwisp |
10.4.2009, 8:13
Сообщение
#15
|
астарожна ынтжинэр Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: 23 |
|
|
|
Litkevich Yuriy |
10.4.2009, 9:00
Сообщение
#16
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
Если я правильно понял, то человек делает так:
создал класс wMay, сделал на его основе плагин для Дизайнера. В дизайнере использует этот класс. Затем получившийся ui-файл загружает в своей программе с помощью QFormBuilder Макрос Q_PROPERTY объясняет дизайнеру какими функциями пользоваться, когда он должен прочитать свойства или сохранить. Поэтому я вот по размышлял и пришёл к выводу, что толку от этих функций (от того, что мы их увидим) нам ни какого. А код в 13 сообщении, это как раз код плагина. Где и правда неясно как прочитать свойства самого себя. heiheshang, в приведённом примере ui-файла это ты ввел такие значения свойства (Имя константы, ...)? |
|
|
heiheshang |
10.4.2009, 9:15
Сообщение
#17
|
Студент Группа: Новичок Сообщений: 10 Регистрация: 9.4.2009 Пользователь №: 666 Спасибо сказали: 0 раз(а) Репутация: 0 |
В смысле не относится, этот класс создается плагином при чтении ui файла. Привожу код функций
Цитата heiheshang, в приведённом примере ui-файла это ты ввел такие значения свойства (Имя константы, ...)? Я их ввел в дизайнере. |
|
|
Litkevich Yuriy |
10.4.2009, 9:19
Сообщение
#18
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
|
|
|
igor_bogomolov |
10.4.2009, 12:50
Сообщение
#19
|
Профессионал Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: 29 |
Да тут сам черт ногу сломит. Логика программы совершенно неправильная.
Читаем Юрия, и учимся создал класс wMay, сделал на его основе плагин для Дизайнера. В дизайнере использует этот класс. Затем получившийся ui-файл загружает в своей программе с помощью QFormBuilder Макрос Q_PROPERTY объясняет дизайнеру какими функциями пользоваться, когда он должен прочитать свойства или сохранить. Далее, создается форма в десигнере. В Property Editor, вы задаете свойвтво своего виджета посредством setDefHeaders. Дале если вы хотите чтобы ваш виджет как то отреагировал на изменение этого свойства (например перерисовался по другому), то это должно быть описано именно в методе setDefHeaders. Перечитавать свойства в самом конструкторе класса wMay просто бессмысленно. hname в этот момент ничего не содержит. Т.о. если вы опишите как должен отреагировать виджет на изменение свойства setDefHeaders, то ничего более делать не придется. При загрузке ui формы все автоматически отобразится должным образом. |
|
|
Текстовая версия | Сейчас: 29.11.2024, 23:55 |