Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 更新QGridLayouts_C++_Qt - Fatal编程技术网

C++ 更新QGridLayouts

C++ 更新QGridLayouts,c++,qt,C++,Qt,嗨,伙计们,我正在为我的学习编写游戏,我有很大的问题(我的腿受伤了,我不能去上课) 我的工作是在C++中做简单的战列游戏,QT. 我正处于逻辑代码完成的阶段,但gui是一个大烂摊子。 下面是gui.cpp文件的代码: #include <QtWidgets> #include "dialog.h" Dialog::Dialog() { createGraczBox(); createKomputerBox(); createOdpowiedz();

嗨,伙计们,我正在为我的学习编写游戏,我有很大的问题(我的腿受伤了,我不能去上课)

我的工作是在C++中做简单的战列游戏,QT.

我正处于逻辑代码完成的阶段,但gui是一个大烂摊子。 下面是gui.cpp文件的代码:

#include <QtWidgets>
#include "dialog.h"

Dialog::Dialog()
{
    createGraczBox();
    createKomputerBox();
    createOdpowiedz();

    QGridLayout *mainLayout = new QGridLayout;
    mainLayout->addWidget(graczBox , 0 , 0 );
    mainLayout->addWidget(komputerBox , 0 , 1 );
    mainLayout->addWidget(Odpowiedz , 0 , 2 );
    setLayout(mainLayout);

    setFixedSize(800,400);
    setWindowTitle(tr("Battleships!"));

}

void Dialog::createGraczBox()
{
    graczBox = new QGroupBox(tr("Gracz"));
    QGridLayout *layout = new QGridLayout;

    for (int j = 0; j < NumGridRows; ++j) {
            labels[j] = new QLabel(tr("%0").arg(j+1));
            layout->addWidget(labels[j], 0 , j + 1 , Qt::AlignLeft);
    }

    for (int i = 0; i < NumGridRows; ++i) {
            labels[i] = new QLabel(tr("%0").arg(i + 1));
            layout->addWidget(labels[i], i + 1, 0);
    }

    for(int g = 1;g<10;++g)
    {
        layout->setColumnStretch(g,1);
    }
    graczBox->setLayout(layout);
}

void Dialog::createKomputerBox()
{
    komputerBox = new QGroupBox(tr("Komputer"));
    QGridLayout *layout = new QGridLayout;

    for (int j = 0; j < NumGridRows; ++j) {
            labels[j] = new QLabel(tr("%0").arg(j+1));
            layout->addWidget(labels[j], 0 , j + 1 );
    }

    for (int i = 0; i < NumGridRows; ++i) {
            labels[i] = new QLabel(tr("%0").arg(i + 1));
            layout->addWidget(labels[i], i + 1, 0);
    }

    for(int g = 1;g<10;++g)
    {
        layout->setColumnStretch(g,1);
    }
   komputerBox->setLayout(layout);
}

void Dialog::createOdpowiedz()
{
    Odpowiedz = new QGroupBox(tr("Komendy"));
    QFormLayout *layout = new QFormLayout;

    xLabel = new QLabel;
    QPushButton *zmienna_x_przycisk = new QPushButton(tr("X"));
    connect(zmienna_x_przycisk, SIGNAL(clicked()), this, SLOT(setx()));

    yLabel = new QLabel;
    QPushButton *zmienna_y_przycisk = new QPushButton(tr("Y"));
    connect(zmienna_y_przycisk, SIGNAL(clicked()), this, SLOT(sety()));

    xLabel->setText(tr("Aktualne X: %1").arg(zmienna_x));
    yLabel->setText(tr("Aktualne Y: %1").arg(zmienna_y));

    layout->addRow(xLabel);
    layout->addRow(zmienna_x_przycisk);
    layout->addRow(yLabel);
    layout->addRow(zmienna_y_przycisk);
    Odpowiedz->setLayout(layout);
}

void Dialog::setx()
{
    bool ok_x;
        x = QInputDialog::getInt(this, tr("Podaj X:"),
                                     tr(""), 1, 1, 10, 1, &ok_x);
        if (ok_x)
            x=zmienna_x;
}

void Dialog::sety()
{
    bool ok_y;
        y = QInputDialog::getInt(this, tr("Podaj Y:"),
                                     tr(""), 1, 1, 10, 1, &ok_y);
        if (ok_y)
            y=zmienna_y;
}
#包括
#包括“dialog.h”
Dialog::Dialog()
{
createGraczBox();
createKomputerBox();
createOdpowiedz();
QGridLayout*mainLayout=新的QGridLayout;
mainLayout->addWidget(graczBox,0,0);
mainLayout->addWidget(komputerBox,0,1);
mainLayout->addWidget(Odpowiedz,0,2);
设置布局(主布局);
设置固定大小(800400);
setWindowTitle(tr(“战舰!”);
}
void Dialog::createGraczBox()
{
graczBox=新的QGroupBox(tr(“Gracz”);
QGridLayout*layout=新的QGridLayout;
对于(int j=0;j添加小部件(标签[j],0,j+1,Qt::AlignLeft);
}
对于(int i=0;i添加小部件(标签[i],i+1,0);
}
对于(int g=1;gsetcolumnstetch(g,1);
}
graczBox->setLayout(布局);
}
void Dialog::createKomputerBox()
{
komputerBox=新QGroupBox(tr(“Komputer”);
QGridLayout*layout=新的QGridLayout;
对于(int j=0;j添加小部件(标签[j],0,j+1);
}
对于(int i=0;i添加小部件(标签[i],i+1,0);
}
对于(int g=1;gsetcolumnstetch(g,1);
}
komputerBox->setLayout(布局);
}
void Dialog::createOdpowiedz()
{
Odpowiedz=新的QGroupBox(tr(“Komendy”);
QFormLayout*布局=新QFormLayout;
xLabel=新的QLabel;
QPushButton*zmienna_x_przycisk=新的QPushButton(tr(“x”);
连接(zmienna_x_przycisk,信号(单击()),此,插槽(setx());
yLabel=新的QLabel;
QPushButton*zmienna_y_przycisk=新的QPushButton(tr(“y”);
连接(zmienna_y_przycisk,信号(单击()),此,插槽(sety());
xLabel->setText(tr(“Aktualne X:%1”).arg(zmienna_X));
yLabel->setText(tr(“Aktualne Y:%1”).arg(zmienna_Y));
布局->添加行(xLabel);
布局->添加行(zmienna_x_przycisk);
布局->添加行(yLabel);
布局->添加行(zmienna_y_przycisk);
Odpowiedz->setLayout(布局);
}
void Dialog::setx()
{
布尔ok_x;
x=QInputDialog::getInt(这个,tr(“Podaj x:”),
tr(“”、1、1、10、1和ok_x);
如果(ok_x)
x=zmienna_x;
}
void Dialog::sety()
{
好的;
y=QInputDialog::getInt(this,tr(“Podaj y:”),
tr(“”、1、1、10、1和ok_y);
如果(确定)
y=zmienna_y;
}
他们知道它应该如何工作:

  • 我通过点击来选择x和y
  • 在新窗口中选择数字
  • 它们应该出现在“Aktualne X:/Y:”中
  • 当我有x和y时,点击ok按钮(他现在不在那里)
  • 计算机检查在太空中标记的数字Komputer/Gracz
  • 将x和y重置为0
  • 显示文本“你错过了。电脑错过了。”
  • 继续前进,直到有人赢

  • 但我不知道如何通过其他操作使布局自动更新。我无法使dowhile在此工作。

    您需要使用。创建“确定”按钮并将其连接到一个函数,该函数将用于处理
    x
    y
    变量。

    我知道如何添加ok按钮,这里的问题是更新我的整个布局。也许你想尝试
    QGraphScene
    。如何更新布局?布局中只有行号和列号。c在哪里表示网格内实际数据的ELL?