Updating QGridLayouts

Updating QGridLayouts

本文关键字:QGridLayouts Updating      更新时间:2023-10-16

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

我的工作是用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;
}

他们应该工作的方式:

  1. 我通过单击它来选择 x 和 y。
  2. 在新窗口中选择数字。
  3. 它们应该出现在"Aktualne X:/Y:"中。
  4. 当我有 x 和 y 时,单击确定按钮(他现在不在那里)。
  5. 计算机检查在太空中标记它的数字 Komputer/Gracz。
  6. 将 x 和 y 重置为 0。
  7. 显示文本"您错过了。电脑错过了。
  8. 继续前进,直到一个人赢。

但是我不知道如何通过其他操作使我的布局自行更新。我不能在这里做工作。

您需要在此处使用信号和插槽。创建"确定"按钮并将其connect到一个函数,该函数将用于处理您的xy变量。