C++ 类中继承QObject的方法在调用时被标识为属性,不';t运行法
基本上,我有一个我正在做的项目,应该是一个Tic-Tac-Toe的图形游戏,从主qml文件对一个名为“game”的类的方法调用(以及任何方法调用)都不起作用。返回此错误:C++ 类中继承QObject的方法在调用时被标识为属性,不';t运行法,c++,qt,C++,Qt,基本上,我有一个我正在做的项目,应该是一个Tic-Tac-Toe的图形游戏,从主qml文件对一个名为“game”的类的方法调用(以及任何方法调用)都不起作用。返回此错误: TypeError:object[object]的属性“takeTurn”不是函数 我在这个类中继承了QObject,还包含了Q_对象宏,并将该方法标记为Q_可调用 代码编译和链接非常好,这是一个运行时错误 以下是相关代码以帮助您: Game.hpp: #define GAME_HPP #include "Board.hpp
TypeError:object[object]的属性“takeTurn”不是函数
我在这个类中继承了QObject,还包含了Q_对象宏,并将该方法标记为Q_可调用
代码编译和链接非常好,这是一个运行时错误
以下是相关代码以帮助您:
Game.hpp:
#define GAME_HPP
#include "Board.hpp"
#include <ostream>
#include <QObject>
class Game : public QObject
{
Q_OBJECT;
public:
//...
Q_INVOKABLE void takeTurn(int x, int y);
Q_INVOKABLE bool checkWin();
friend std::ostream& operator<<(std::ostream&, const Game&);
private:
char player_;
int turns_;
Board board_;
};
std::ostream& operator<<(std::ostream&, const Game&);
#endif // GAME_HPP
您已将游戏注册为一个类型,因此需要创建该类型的对象,错误指向该问题:
// ...
Window {
visible: true
width: 600
height: 600
title: qsTr("TicTacToe")
Game {
id: game
}
// ...
Item {
// ...
MouseArea {
id: mouseArea1
anchors.fill: parent
onClicked: {
game.takeTurn(0,0)
}
}
}
// ...
/。。。
窗口{
可见:正确
宽度:600
身高:600
标题:qsTr(“Tictatcoe”)
游戏{
id:游戏
}
// ...
项目{
// ...
鼠耳{
id:mouseArea1
锚定。填充:父级
再次点击:{
游戏。轮流(0,0)
}
}
}
//…
您已将游戏注册为一个类型,因此您需要做的是创建该类型的对象,错误指向该问题:
// ...
Window {
visible: true
width: 600
height: 600
title: qsTr("TicTacToe")
Game {
id: game
}
// ...
Item {
// ...
MouseArea {
id: mouseArea1
anchors.fill: parent
onClicked: {
game.takeTurn(0,0)
}
}
}
// ...
/。。。
窗口{
可见:正确
宽度:600
身高:600
标题:qsTr(“Tictatcoe”)
游戏{
id:游戏
}
// ...
项目{
// ...
鼠耳{
id:mouseArea1
锚定。填充:父级
再次点击:{
游戏。轮流(0,0)
}
}
}
//…
有效!我…没有看到,我看的指南没有提到在qml文件中创建对象的任何内容。我应该早一点尝试:/非常感谢!@MerlinNewcomb看到它有效了!我…没有看到,我看的指南没有提到在qml文件中创建对象的任何内容。我应该尝试一下早一点:/太谢谢你了!@merlinb
import QtQuick.Window 2.12
import com.myself 1.0
Window {
visible: true
width: 600
height: 600
title: qsTr("TicTacToe")
Item {
//...
MouseArea {
id: mouseArea1
anchors.fill: parent
onClicked: {
Game.takeTurn(0,0)
}
}
}
//...
}
//...
// ...
Window {
visible: true
width: 600
height: 600
title: qsTr("TicTacToe")
Game {
id: game
}
// ...
Item {
// ...
MouseArea {
id: mouseArea1
anchors.fill: parent
onClicked: {
game.takeTurn(0,0)
}
}
}
// ...