你能看一下并解释一下,我在下面的代码中做错了什么吗?
#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会使其恢复正常...
1条答案
按热度按时间nx7onnlm1#
错误指出
Q_PROPERTY
宏不能将成员player
用作函数。如果未指定MEMBER变量,则需要READ访问器函数。它用于阅读属性值。理想情况下,使用const函数来实现此目的,并且它必须返回属性的类型或对该类型的const引用。例如,QWidget::focus是具有READ函数的只读属性,QWidget::hasFocus()。
你需要创建一个getter并将其用作
READ
函数,或者你可以使用MEMBER
。如果未指定READ访问器函数,则需要MEMBER变量关联。这使得给定的成员变量可读和可写,而无需创建READ和WRITE访问器函数。如果需要控制变量访问,除了MEMBER变量关联之外,还可以使用READ或WRITE访问器函数(但不能同时使用两者)。
看看这里。