Название: Свойства в Qt Отправлено: xTr1m от Декабрь 24, 2010, 11:22 День добрый, задался я таким вопросом: зачем в Qt есть свойства. В голову дельного ничего не приходит. Может это дань моде или красиво выглядит обращение и задание значение для объекта. Ведь по сути, это гораздо медленнее, нежели простое обращение к методу объекта. Может тут дело в кроссплатформенных вещах, о которых мне неведомо. В общем, прошу меня просветить. Большое спасибо =))
Название: Re: Свойства в Qt Отправлено: UVV от Декабрь 24, 2010, 11:30 Что за свойство?
Если это простой член класса, то у него у каждого есть get/set методы, не переживай. Название: Re: Свойства в Qt Отправлено: xTr1m от Декабрь 24, 2010, 12:12 Я имел в виду вот эти свойства:
Q_PROPERTY(type name READ getFunction [WRITE setFunction] [RESET resetFunction] [DESIGNABLE bool] [SCRIPTABLE bool] [STORED bool]) и вот такое использование: obj->setProperty("prop", true); ведь можно сразу вызвать метод, который устанавливает поле "prop" в true Название: Re: Свойства в Qt Отправлено: alexman от Декабрь 24, 2010, 12:23 День добрый, задался я таким вопросом: зачем в Qt есть свойства. QStateMachine юзает свойства, например.Название: Re: Свойства в Qt Отправлено: xTr1m от Декабрь 24, 2010, 12:25 кажется я нашел ответ на свой вопрос:
Цитировать 3) Макрос Q_PROPERTY позволяет в некоторых случаях избежать приведения. Пример: class SomeClass : public QObject { Q_OBJECT Q_PROPERTY(bool prop READ prop WRITE setProp); private: bool var; public: SomeClass() : var(true) { } bool prop() const { return var; } void setProp(bool newValue) { var = newValue; } }; //а теперь, имея указатель на QObject, мы можем изменять значения переменных унаследованного класса: SomeClass *sc = new SomeClass; QObject *obj = sc; obj->setProperty("prop", true); //тоже самое, что и sc->setProp(true); может есть еще интересные нюансы? =) Название: Re: Свойства в Qt Отправлено: maxxant от Декабрь 24, 2010, 12:28 В основном для упрощения работы с Qt скриптами. Ну и для чтения некой конфигурации из текстового файла, чтобы не парсить и сопоставлять методы вручную.
Название: Re: Свойства в Qt Отправлено: xTr1m от Декабрь 24, 2010, 12:30 а можно вот тут вот
Цитировать для чтения некой конфигурации из текстового файла, чтобы не парсить и сопоставлять методы вручную пояснить или дать кусочек кода (хотя бы псевдо) для наглядностиНазвание: Re: Свойства в Qt Отправлено: JamS007 от Декабрь 24, 2010, 12:52 В уроках от самих троллей сказано, что свойства можно использовать еще и как теги для объектов. Свойства можно задавать на этапе выполнения:
Код
Пояснение троллей: True if the property has been defined using Q_PROPERTY. False if it is dynamically added. Таким образом можно создавать множество тегов, в которых можно хранить информацию времени выполнения. Ссылка на уроки от троллей (http://qt.nokia.com/services-partners/qt-in-education/qt-in-education-course-material). (L2 - урок про QObject и Property) Название: Re: Свойства в Qt Отправлено: SASA от Декабрь 24, 2010, 13:05 Свойства - это вещь.
Как я использую свойства. 1. "Полиморфизм". Есть много разных объектов. Интерфейсы у всех разные. Но есть свойства. Нам надо знать только ИМЯ свойства, чтоб с ним работать. 2. Настройка объекта. Смотри проперти браузер, в ку-те дизайнере. 3. Скрипты. Вообщем, проперти, это часть метообъектной информации ку-те, очень мощной штуки. Название: Re: Свойства в Qt Отправлено: maxxant от Декабрь 24, 2010, 13:25 а можно вот тут вот Цитировать для чтения некой конфигурации из текстового файла, чтобы не парсить и сопоставлять методы вручную пояснить или дать кусочек кода (хотя бы псевдо) для наглядностивот простой пример, думаю будет понятно. делаем всё также как и здесь: http://doc.qt.nokia.com/4.7/restoring-geometry.html но только через свойства. заменяем методы на такие: Код: void MainWindow::closeEvent(QCloseEvent *event) Геометрия окна также сохраняется и восстанавливается. Можно таким образом добавить кучу ключей и все они прочитаются в цикле автоматом. Название: Re: Свойства в Qt Отправлено: xTr1m от Декабрь 24, 2010, 13:40 Всем спасибо, свою безграмотность в этом вопросе я развеял )
|