gpt4 book ai didi

c++ - 单击不同窗口上的按钮时更改类的参数

转载 作者:行者123 更新时间:2023-11-30 05:07:25 25 4
gpt4 key购买 nike

我是 c++ 和 Qt 的新手,但我正在尝试创建一个简单的战舰游戏。到目前为止,我已经能够设置网格并放置船只,但我不想在您选择“难度”的主游戏窗口之前放置一个菜单,这将决定战列舰的网格大小。

绘制棋盘的代码如下:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "boardrender.h"
#include "playerrender.h"
#include "../BattleScrabble/BattleshipBoard.h"
#include "../BattleScrabble/HumanPlayer.h"

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{

ui->setupUi(this);
// BattleshipBoard *a = new BattleshipBoard(10);
// Ship *b = new Ship(AircraftCarrier);

ui->battleshipBoardView->setMouseTracking(true);

// BoardRender *scene=new BoardRender(a, ui->battleshipBoardView->width(), this);
// ui->battleshipBoardView->setScene(scene);
ui->battleshipBoardView->resize(ui->battleshipBoardView->width(),ui->battleshipBoardView->width());
Player *b = new HumanPlayer(10,0);

PlayerRender *a = new PlayerRender(b, ui->battleshipBoardView,this);
}

MainWindow::~MainWindow()
{
delete ui;
}

其中 new HumanPlayer(10,0); 是网格大小。

现在是有趣的部分,难度窗口:

#include "difficultywindow.h"
#include "ui_difficultywindow.h"
#include "DifficultyWindow.h"
#include "mainwindow.h"
#include "ui_mainwindow.h"
DifficultyWindow::DifficultyWindow(QWidget *parent) :
QDialog(parent),
ui(new Ui::DifficultyWindow)
{
ui->setupUi(this);
}

DifficultyWindow::~DifficultyWindow()
{
delete ui;
}

void DifficultyWindow::on_pushButton_clicked()
{
mWindow = new MainWindow(this);

mWindow->show();
}

当我实例化“new MainWindow”时,有没有办法改为更改此类中的 HumanPlayer 参数?

非常感谢任何帮助。谢谢:)

编辑:和我的 main.cpp

#include "mainwindow.h"
#include <QApplication>
#include "difficultywindow.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
DifficultyWindow w;
w.show();

return a.exec();
}

最佳答案

你必须做一些修改,为了让你的代码更容易理解,你必须首先向 MainWidow 添加一个参数,在这种情况下它将被称为网格

主窗口.h

class MainWindow : public QMainWindow
{
Q_OBJECT

public:
explicit MainWindow(int grid, QWidget *parent = 0);
~MainWindow();

private:
Ui::MainWindow *ui;
Player *b;
PlayerRender *g;
};

主窗口.cpp

MainWindow::MainWindow(int grid, QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{

ui->setupUi(this);
ui->battleshipBoardView->setMouseTracking(true);
ui->battleshipBoardView->resize(ui->battleshipBoardView->width(),ui->battleshipBoardView->width());
b = new HumanPlayer(grid, 0);
g = new PlayerRender(b, ui->battleshipBoardView,this);
}

然后我们将创建一个枚举并处理信号而不是 3 我们将使用 QButtonGroup:

difficultyWindow.h

class difficultyWindow : public QDialog
{
Q_OBJECT

public:
enum Difficult{
EASY,
MEDIUM,
HARD
};
explicit difficultyWindow(QWidget *parent = 0);
~difficultyWindow();

private slots:
void onClicked(int id);
private:
Ui::difficultyWindow *ui;
MainWindow *mWindow;
QButtonGroup *group;
};

difficultyWindow.h

difficultyWindow::difficultyWindow(QWidget *parent) :
QDialog(parent),
ui(new Ui::difficultyWindow)
{
ui->setupUi(this);
group = new QButtonGroup(this);
group->addButton(ui->easyDiffButton, EASY);
group->addButton(ui->mediumDifficultyButton, MEDIUM);
group->addButton(ui->hardDifficultyButton, HARD);

connect(group, SIGNAL(buttonClicked(int)), this, SLOT(onClicked(int)));
}

difficultyWindow::~difficultyWindow()
{
delete ui;
}

void difficultyWindow::onClicked(int id)
{
int grid;
switch (id) {
case EASY:
grid = 10;
break;
case MEDIUM:
grid = 20;
break;
case HARD:
grid = 30;
break;
}

mWindow = new MainWindow(grid, this);
mWindow->show();
}

注意:删除插槽,在这种情况下不需要。

关于c++ - 单击不同窗口上的按钮时更改类的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47446004/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com