C++ 更新QGridLayouts
嗨,伙计们,我正在为我的学习编写游戏,我有很大的问题(我的腿受伤了,我不能去上课) 我的工作是在C++中做简单的战列游戏,QT. 我正处于逻辑代码完成的阶段,但gui是一个大烂摊子。 下面是gui.cpp文件的代码:C++ 更新QGridLayouts,c++,qt,C++,Qt,嗨,伙计们,我正在为我的学习编写游戏,我有很大的问题(我的腿受伤了,我不能去上课) 我的工作是在C++中做简单的战列游戏,QT. 我正处于逻辑代码完成的阶段,但gui是一个大烂摊子。 下面是gui.cpp文件的代码: #include <QtWidgets> #include "dialog.h" Dialog::Dialog() { createGraczBox(); createKomputerBox(); createOdpowiedz();
#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;
}
他们知道它应该如何工作:
但我不知道如何通过其他操作使布局自动更新。我无法使dowhile在此工作。您需要使用。创建“确定”按钮并将其连接到一个函数,该函数将用于处理
x
和y
变量。我知道如何添加ok按钮,这里的问题是更新我的整个布局。也许你想尝试QGraphScene
。如何更新布局?布局中只有行号和列号。c在哪里表示网格内实际数据的ELL?