我在Qt中遇到以下问题,我试图制作国际象棋游戏,但我遇到了一些问题:
在课程主窗口中,我有以下功能:
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
{
scene = new ChessBoard;
QGraphicsView *view = new QGraphicsView(scene);
setCentralWidget(view);
connect(scene,SIGNAL(clicked(int,int)),this,SLOT(clicked(int,int)));
//!!!!!!!!!!
scene->setInitialPositions();
}
我有一个变量场景,场景是ChessBoard类的一个对象。 在整个类 mainwindow 中,我可以使用scene-variable来使用在ChessBoard中声明的函数。
但是,我还有另一个名为游戏的课程。 在游戏中我有这个功能
void game::setStartBord() {
scene->setInitialPositions();
}
只需启动scene->setInitialPositions();
但是,我无法访问'场景变量'那里。我试图继承ChessBoard和MainWindow类,试图使场景全局化,但没有一个真的是一个很好的解决方案。
我该怎么做? 完整的代码在这里明显: https://github.com/UA-Niel/chess
答案 0 :(得分:0)
您可以使用信号和插槽技术。将您的游戏类对象连接到场景对象。
connect(game, &Game::mySignal, scene, &ChessBoard::setInitialPositions);
在游戏类中定义信号。
class Game .. {
..
signals:
void mySignal();
..
};
然后在公共插槽中的ChessBorard类中定义setInitialPositions。
class ChessBoard {
...
public slots:
<datatype> setInitialPositions();
};
然后使用
emit mySignal(); from Game class
在您的ChessBoad课程中执行setIntialPositions()
。
您需要设计可以在某个时刻访问这两个对象的代码。主要是MainWindow,因为你在程序启动时初始化类。
如果您的代码不依赖于初始化类。 你可以在Game class中简单地做一个新的ChessBoard对象
ChessBoard myObject;
myObject.setIntialPositions();