Название: Q_PROPERTY в классе трехмерного массива Отправлено: alik от Март 16, 2015, 18:12 Добрый вечер!
Хочу задействовать метод Q_PROPERTY в своем классе трехмерного массива для чтения и записи заданного элемента: class TShortintSpaceXYZ { Q_PROPERTY(qint8 Item READ GetItem WRITE SetItem) private: qint8 *FData; bool CheckIndex(int X, int Y, int Z); public: TShortintSpaceXYZ(); TShortintSpaceXYZ(int X, int Y, int Z); ~TShortintSpaceXYZ(); int FX, FY, FZ; qint8 GetItem(int X, int Y, int Z); bool SetItem(int X, int Y, int Z, qint8 Val); }; При такой записи компилятор MinGW ругается 3 раза: "expected ',' or '...' before 'READ' " "ISO C++ forbids declaration of Q_PROPERTY with no type [-fpermissive]" "expected ';' at end of member declaration" Что я делаю не так? Название: Re: Q_PROPERTY в классе трехмерного массива Отправлено: gil9red от Март 16, 2015, 19:00 http://doc.qt.io/qt-5/properties.html
"To declare a property, use the Q_PROPERTY() macro in a class that inherits QObject." Название: Re: Q_PROPERTY в классе трехмерного массива Отправлено: alik от Март 16, 2015, 19:32 http://doc.qt.io/qt-5/properties.html "To declare a property, use the Q_PROPERTY() macro in a class that inherits QObject." В таком виде компилятор попускает #include <QObject> class TShortintSpaceXYZ { Q_PROPERTY(qint8 Item READ GetItem WRITE SetItem) private: qint8 *FData; bool CheckIndex(int X, int Y, int Z); public: TShortintSpaceXYZ(); TShortintSpaceXYZ(int X, int Y, int Z); //constructor ~TShortintSpaceXYZ(); //destructor int FX, FY, FZ; qint8 GetItem(int X, int Y, int Z); bool SetItem(int X, int Y, int Z, qint8 Val); void FillWithValue(qint8 Val); bool CheckForValue(int Val, int MinCountPoints); bool MoveElemOnY(TShortintSpaceXYZ Space, int dy); bool Assign(TShortintSpaceXYZ SpCopy, TShortintSpaceXYZ SpImage); void Clear(); }; TShortintSpaceXYZ SpaceXYZ = TShortintSpaceXYZ(10,10,10); Но обращаться к элементам массива SpaceXYZ[1,2,3] не получается ! "no match for opeator [] (operand types are 'TShortintSpaceXYZ' and 'int' " Но Название: Re: Q_PROPERTY в классе трехмерного массива Отправлено: kuzulis от Март 16, 2015, 19:48 Код
Название: Re: Q_PROPERTY в классе трехмерного массива Отправлено: alik от Март 17, 2015, 10:08 Код
Название: Re: Q_PROPERTY в классе трехмерного массива Отправлено: __Heaven__ от Март 17, 2015, 10:17 В определении метода нужно
Код вместо Код
Название: Re: Q_PROPERTY в классе трехмерного массива Отправлено: Fregloin от Март 17, 2015, 11:05 а разве свойство property позволяет установить более одного параметра? сомневаюсь, как вы это в коде будете задавать?
тут лучше или через вызов метода set(int x, int y, int z), или переопределить оператор[][][] (не знаю можно лит такое сделать напрямую). на худой конец чеорез какой нить вертекс Vertex{x,y,z}. что то типа struct Vertex {int x,y,z}; class YourClass : public QObject { Q_PROPERTY (Vertex coordinate MEMBER p_coord WRITE setCoord) ... }; Q_DECLARE_METATYPE(Vertex) Название: Re: Q_PROPERTY в классе трехмерного массива Отправлено: deMax от Март 18, 2015, 10:44 Хочу задействовать метод Q_PROPERTY в своем классе трехмерного массива для чтения и записи заданного элемента: Насколько я понял:Цитировать Q_PROPERTY - нужен при создании плагинов для Дизайнера, т.е. чтобы описать уникальные свойства виджета собственной разработки. Тем самым пользователь, который будет использовать твой виджет в дизайнере сможет изменять эти свойства прямо в дизайнере. Свойства не объявленные таким макросом в Дизайнере не видны. ИМХО, для вашего класса это совсем не нужно, тем более эта штука не избавляет от необходимости писать setValue, getValue...p.s. ИМХО в данном случае лучше использовать структуру и обращаться к членам класса на прямую - никаких проверок x,y,z на вход и выход все равно не засунуть. p.s.s. ИМХО нет смысла скрывать N полей класса и делать N функций на чтение и N функций на запись, если в эти функции проверку не засунуть (либо проверять нечего, либо эта проверка кроме потери производительности и нагромождения кода ничего не даст). |