[英]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.