簡體   English   中英

使用在MainWindow Qt中聲明的變量

[英]Use variable declared in MainWindow Qt

我在Qt中遇到以下問題,我正在嘗試下棋游戲,但是遇到一些問題:

在類mainwindow中,我具有以下功能:

    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類的對象。 在整個類的主窗口中,我可以使用場景變量來使用在ChessBoard中聲明的函數。

功能實例

但是,我還有另一類叫做game 游戲中我具有此功能

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

它只需要啟動scene->setInitialPositions();

但是,我無法訪問那里的“場景變量”。 我試圖繼承ChessBoard和MainWindow類,試圖使場景全局化,但沒有一個是一個好的解決方案。

我該怎么做? 完整的代碼在這里可見: https//github.com/UA-Niel/chess

您可以使用信號和插槽技術。 將您的游戲類對象連接到場景對象。

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類中簡單地創建一個新的ChessBoard對象

ChessBoard myObject;
myObject.setIntialPositions();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM