Russian Qt Forum

Qt => Общие вопросы => Тема начата: xTr1m от Декабрь 24, 2010, 11:22



Название: Свойства в 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
В уроках от самих троллей сказано, что свойства можно использовать еще и как теги для объектов. Свойства можно задавать на этапе выполнения:

Код
C++ (Qt)
bool ret = object->setProperty(name,value);

Пояснение троллей: 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)
{
    QSettings settings("MyCompany", "MyApp");

    settings.beginGroup("prop");
    settings.setValue( "geometry", geometry() );
    settings.endGroup();
    QMainWindow::closeEvent(event);
}

void MainWindow::readSettings()
{
    QSettings settings("MyCompany", "MyApp");

    settings.beginGroup("prop");
    QStringList prop_keys = settings.allKeys();
    while( prop_keys.size() )
    {
        QString key = prop_keys.takeFirst();
        setProperty( qPrintable(key), settings.value(key) );
    }
    settings.endGroup();
}

Геометрия окна также сохраняется и восстанавливается. Можно таким образом добавить кучу ключей и все они прочитаются в цикле автоматом.



Название: Re: Свойства в Qt
Отправлено: xTr1m от Декабрь 24, 2010, 13:40
Всем спасибо, свою безграмотность в этом вопросе я развеял )