обрабатывает структуру в Matlab GUI - PullRequest
2 голосов
/ 22 июля 2011

Я изучаю программирование GUI в Matlab.

Я обнаружил, что довольно сложно, что структура дескрипторов используется для хранения всех данных GUI.Я хотел бы знать, как именно структура.Я буду использовать пример для объяснения моего вопроса.

Допустим, мы создали edittext1.

, мы бы сохранили handles.edittext1.затем

str = get(hObject,'String');
set(handles.edittext1,'String',str);

это установит String в handles.edittext1 в значение str.

Мой вопрос, как ни странно, для меня, 'String' в операции get и set не чувствителен к регистру.

И handles.edittext1.String не возвращает сохраненную строку.

Итак, дескрипторы не являются массивом структур, и, как следует из вопроса, какой структурой дескрипторов это должно быть?И тот же вопрос можно задать и hObject.

И нет, это не домашнее задание или задание.Это постоянный проект для моей работы.Я работал с Matlab в течение многих лет, но это первый раз для меня, чтобы сделать графический интерфейс с Matlab.Так что, пожалуйста, относитесь ко мне как к новичку.

regards

Ответы [ 2 ]

4 голосов
/ 22 июля 2011

hObject - это дескриптор объекта, который вызвал обратный вызов (например, кнопка, которая инициировала обратный вызов при нажатии).дескрипторы - это структура, содержащая дескрипторы для всех объектов на вашей фигуре.hObject будет отличаться для каждого объекта, один и тот же список дескрипторов будет передан каждому обратному вызову.В вашем примере, если это в обратном вызове edittext1, hObject и handles.edittext1 одинаковы.

Оба являются дескрипторами объектов, а не структурами.Таким образом, вы не можете сказать, handles.edittext1.String.Все свойства объектов (например, содержимое строки) доступны через функции set и get.Как вы заметили, имена свойств не чувствительны к регистру.Надеюсь, что ответили на все ваши вопросы.

Обновление:

Мой ответ на ваш дополнительный вопрос был слишком длинным для комментария, поэтому я обновил ответ.

Я не уверен, что понимаю ваш вопрос.Если вы хотите проверить значение свойства, вы используете get, как показано в вашем вопросе:

str = get(handles.edittext1, 'String');

Если вы хотите проверить, существует ли свойство или что это за свойства, вызовите get без указанияпараметр:

get(handles.edittext1)

Это выведет все свойства и их значения на консоль.Если вы хотите сделать это программно,

params = get(handles.edittext1);

вернет структуру, поля которой являются параметрами.Затем вы можете получить доступ к параметрам как

str = params.String

и можете проверить, существует ли поле с

 isfield(params, 'String');   // This is case sensitive
0 голосов
/ 22 июля 2011

AFAIK все дескрипторы компонентов GUI являются объектами классов (ООП), которые наследуются от суперкласса handle (точнее, hgsetget, который сам является подклассом handle). Таким образом, hObject хранит указатель на объект, а не сам объект.

Класс handle и его общие подклассы предоставляют общие функции (интерфейс), такие как set / get (они выполняют частичное совпадение без учета регистра для имени свойства). В этом случае вам нужно получить доступ к «свойству» «string» с помощью методов getter / setter.

handles - это переменная, используемая в GUI-генерируемых GUI, передаваемая функциям обратного вызова для удобства пользователя. Это простая структура (не структурный массив), поэтому каждое поле может хранить различные типы данных.

Примечание: MATLAB имеет отличную документацию, объясняющую все это в деталях. Я обновлю ответ позже со ссылками на соответствующие страницы ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...