你能看一下并解释一下,我在下面的代码中做错了什么吗?
#ifndef BACKEND_H
#define BACKEND_H
#include <QObject>
#include <QDebug>
#include <QtQml>
class BackEnd : public QObject
{
Q_OBJECT
Q_PROPERTY(int player READ player WRITE player_change)
QML_ELEMENT
int player;
public:
explicit BackEnd(QObject *parent = nullptr);
signals:
int player_changed(int player);
public slots:
int player_change(int player);
};
#endif // BACKEND_H
cpp:
#include "backend.h"
BackEnd::BackEnd(QObject *parent)
: QObject{parent}
{
}
int BackEnd::player_change(int player)
{
return (player == 1) ? 2 : 1;
}
错误:
Expression cannot be used as a function
自动编辑moc文件出现错误…
删除Q_PROPERTY就可以了…
Q_PROPERTY
宏不能使用成员player
作为函数。
如果没有成员变量,则需要READ访问函数指定。它用于读取属性值。理想情况下,是const函数用于此目的,并且它必须返回属性的类型或对该类型的const引用。例如,focus是一个具有READ函数的只读属性,QWidget: hasFocus () .
您需要创建一个getter并将其用作READ
函数。或者使用MEMBER
如果没有READ accessor函数,则需要关联成员变量都是确定的。这使得给定的成员变量可读并且可写而不需要创建READ和WRITE访问器功能。仍然可以使用READ或WRITE访问器函数除了成员变量关联之外(但不是两者都有),如果需要的话控制变量访问。
看这里
#ifndef BACKEND_H
#define BACKEND_H
#include <QDebug>
#include <QObject>
#include <QtQml>
class BackEnd : public QObject
{
Q_OBJECT
Q_PROPERTY(int foo READ foo WRITE setFoo NOTIFY fooChanged)
Q_PROPERTY(int bar MEMBER bar NOTIFY barChanged)
QML_ELEMENT
public:
explicit BackEnd(QObject *parent = nullptr) : QObject{parent} {}
int foo() const { return m_foo; }
void setFoo(int val) { m_foo = val; emit fooChanged(); }
signals:
void fooChanged();
void barChanged();
private:
int m_foo;
int bar;
};
#endif // BACKEND_H