Qt快速:QML/ c++表达式不能用作函数?



你能看一下并解释一下,我在下面的代码中做错了什么吗?

#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

相关内容

最新更新