Russian Qt Forum
Сентябрь 30, 2024, 22:20 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: использование Q_PROPERTY  (Прочитано 5465 раз)
demaker
Птица говорун
*****
Offline Offline

Сообщений: 960


Просмотр профиля
« : Январь 05, 2017, 22:32 »

Скажите как определить правильно свойство в объекте, чтобы я потом мог его вытащить в QML???

Код
C++ (Qt)
class ExchangeColor : public QObject
{
   Q_OBJECT
   Q_PROPERTY(QString current READ current)
 
//private:
//    QString current;
 
public:
   explicit ExchangeColor(QObject *parent = 0);
   virtual ~ExchangeColor();
 
   QString current() const {return current;}
   Q_INVOKABLE QString nextColor();
 
private:
   QTimer *timer;
 
signals:
   void changeColor();
 
public slots:
};
 

Код
C++ (Qt)
Item {  
   width: 360
   height: 360
 
   ExchangeColor{
       id: exchColor
       current: redrect.color //не находит свойство ???
       onChangeColor: {redrect.color = bluerect.color = nextColor()}
   }
 
 
Записан
titan83
Гость
« Ответ #1 : Январь 06, 2017, 10:01 »

У тебя тут несколько проблем:
1. Ты привел не весь код, но, скорее всего, у тебя нет qmlRegisterType<ExchangeColor>("MySuperLib", 1, 0, "ExchangeColor");
2. Свойство свое ты сделал read-only, но при этом пытаешься сделать биндинг к другому свойству, а записать-то тебе его у себя нечем.
3. Сигнал у тебя просто так болтается, ты бы сделал в описании свойста NOTIFY changeColor. Совет: сигналы лучше именовать в стиле существительноеГлагол-в-прошедшем-времени, т.е. colorChanged будет намного логичнее, да и onColorChanged тоже намного правильнее по смыслу.
4. Используй слово MEMBER в описании свойства, тогда не нужно будет сеттеров-геттеров.
5. Ну и доки-то читай, ага))
Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 960


Просмотр профиля
« Ответ #2 : Январь 06, 2017, 16:48 »

я наверное  Улыбающийся не правильно выразился

qmlRegisterType есть
Код
C++ (Qt)
int main(int argc, char *argv[])
{
   QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
   QGuiApplication app(argc, argv);
 
   qmlRegisterType<ExchangeColor>("com.mycompany.qmlcomponents",1,0,"ExchangeColor");
 
   QQmlApplicationEngine engine;
   engine.load(QUrl(QLatin1String("qrc:/main.qml")));
 
   return app.exec();
}
 

Я имел ввиду , что не могу создать свойство через Q_PROPERTY.

Пытаюсь сделать так
Код
C++ (Qt)
...
   Q_PROPERTY(QString current READ current)
 
public:
   explicit ExchangeColor(QObject *parent = 0);
   virtual ~ExchangeColor();
   QString current() const {return current;}
...
 
Не получается
Ошибка:
Код:
In file included from ..\MyQMLProj\main.cpp:5:0:
..\MyQMLProj\exchangecolor.h: In member function 'QString ExchangeColor::current() const':
..\MyQMLProj\exchangecolor.h:21:37: error: cannot convert 'ExchangeColor::current' from type 'QString (ExchangeColor::)() const' to type 'QString'
     QString current() const {return current;}

Только если так делать
Код
C++ (Qt)
...
   Q_PROPERTY(QString current READ getCurrent)
private:
   QString current;
 
public:
   explicit ExchangeColor(QObject *parent = 0);
   virtual ~ExchangeColor();
   QString geCurrent() const { return current; }    
...
 
но тогда он все равно не видет проперти current в QML
Код:
 ...
 ExchangeColor{
        id: exchColor
        current: redrect.color ->???      
    }
« Последнее редактирование: Январь 06, 2017, 16:58 от demaker » Записан
qate
Супер
******
Offline Offline

Сообщений: 1176


Просмотр профиля
« Ответ #3 : Январь 06, 2017, 17:04 »

внимательно прочитай пример  http://doc.qt.io/qt-5/properties.html#a-simple-example
особое внимание обрати на имена методов и полей класса
Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 960


Просмотр профиля
« Ответ #4 : Январь 06, 2017, 17:57 »

внимательно прочитай пример  http://doc.qt.io/qt-5/properties.html#a-simple-example
особое внимание обрати на имена методов и полей класса

Спасибо
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.357 секунд. Запросов: 23.