使用MainWindow Qt中声明的变量

时间:2017-12-28 23:43:55

标签: c++ qt class inheritance

我在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中声明的函数。

Examples of functions

但是,我还有另一个名为游戏的课程。 在游戏中我有这个功能

void game::setStartBord() {
   scene->setInitialPositions();
}

只需启动scene->setInitialPositions();

即可

但是,我无法访问'场景变量'那里。我试图继承ChessBoard和MainWindow类,试图使场景全局化,但没有一个真的是一个很好的解决方案。

我该怎么做? 完整的代码在这里明显: https://github.com/UA-Niel/chess

1 个答案:

答案 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();