Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
<source lang="cpp"> //Для C++
<source lang="javascript"> // Для QML
много статей на тему QML, но все они оставляют за кадром некоторые моменты.
myObject.myProperty = 101. Для Q_PROPERTY setter должен быть объявлен как public slot, иначе из того же QML нельзя будет например написать:это неправда
else if (_c == QMetaObject::ReadProperty) {
void *_v = _a[0];
switch (_id) {
case 0: *reinterpret_cast< int*>(_v) = a(); break;
}
_id -= 1;
} else if (_c == QMetaObject::WriteProperty) {
void *_v = _a[0];
switch (_id) {
case 0: setA(*reinterpret_cast< int*>(_v)); break;
}
_id -= 1;
1. Для Q_PROPERTY setter должен быть объявлен как public slot, иначе из того же QML нельзя будет например написать:myObject.myProperty = 10
private:
int someProperty;
myObject.myProperty = 10
5. Ну и в общем Qt Creator умеет сам генерировать идейно правильный код для setter & getter если поставить курсор на слово Q_PROPERTY и нажать Alt+Enter
Взаимоисключающие параграфы
А для случая с public свойством, вы абсолютно правы, сеттер обязательно должен быть слотом либо Q_INVOKABLE
class Q_AUTOTEST_EXPORT QDeclarativeBorderImage : public QDeclarativeImageBase
{
Q_OBJECT
Q_ENUMS(TileMode)
Q_PROPERTY(QDeclarativeScaleGrid *border READ border CONSTANT)
Q_PROPERTY(TileMode horizontalTileMode READ horizontalTileMode WRITE setHorizontalTileMode NOTIFY horizontalTileModeChanged)
Q_PROPERTY(TileMode verticalTileMode READ verticalTileMode WRITE setVerticalTileMode NOTIFY verticalTileModeChanged)
public:
QDeclarativeBorderImage(QDeclarativeItem *parent=0);
~QDeclarativeBorderImage();
QDeclarativeScaleGrid *border();
enum TileMode { Stretch = Qt::StretchTile, Repeat = Qt::RepeatTile, Round = Qt::RoundTile };
TileMode horizontalTileMode() const;
void setHorizontalTileMode(TileMode);
Что Вы этим хотели сказать? С чего вдруг они взаимоисключающие?
И покажите тогда уже и qml файл где horizontalTileMode используется для записи.
C++ объекты и QML, все по полочкам