#ifndef MOJEOKNO_H
#define MOJEOKNO_H
#include <QMainWindow>
#include <QTableWidgetItem>
#include <QTreeWidgetItem>
namespace Ui {
class MojeOkno;
}
class MojeOkno : public QMainWindow
{
Q_OBJECT
public:
explicit MojeOkno(QWidget *parent = 0);
~MojeOkno();
private:
int pocet;
int pole [8];
void umisti (int k);
private slots:
void on_horizontalSlider_sliderMoved(int position);
void on_actionRun_triggered();
private:
Ui::MojeOkno *ui;
};
#endif // MOJEOKNO_H
#include "mojeokno.h"
#include "ui_mojeokno.h"
#include <cassert>
QString sloupec (int x)
{
return QString ('a' + x);
}
QString radka (int y)
{
return QString ('8' - y);
}
QString popis (int x, int y)
{
return sloupec (x) + radka (y);
}
void setupTable (QTableWidget * table)
{
table->setColumnCount (8);
table->setRowCount (8);
int h = table->rowHeight (0);
for (int i = 0; i <= 7; i++)
table->setColumnWidth (i, h);
QStringList list;
for (int i = 0; i <= 7; i++)
list << sloupec (i);
table->setHorizontalHeaderLabels(list);
list.clear();
for (int i = 0; i <= 7; i++)
list << radka (i);
table->setVerticalHeaderLabels(list);
}
MojeOkno::MojeOkno(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MojeOkno)
{
ui->setupUi(this);
setupTable (ui->tableWidget);
}
MojeOkno::~MojeOkno()
{
delete ui;
}
void MojeOkno::umisti (int k)
{
for (int i = 0; i <= 7; i ++)
{
bool ok = true;
for (int j = 0; j < k ; j++)
if (pole [j] == i || pole [j] == i-(k-j) || pole [j] == i+(k-j))
ok = false;
if (ok)
{
QString s = QString::number (k);
QColor c = QColor::fromHsv((k*30) % 256, 200, 255);
QTableWidgetItem * p = new QTableWidgetItem;
p->setText (s);
p->setTextColor(QColor ("red"));
p->setBackgroundColor(c);
ui->tableWidget->setItem(i, k, p);
pole [k] = i;
if (k < 7)
umisti (k+1);
else
{
QTableWidget * t = new QTableWidget;
setupTable (t);
for (int i = 0; i <= 7; i++)
for (int j = 0; j <= 7; j++)
{
QTableWidgetItem * u = ui->tableWidget->item (j, i);
if (u != NULL)
t->setItem (j, i, u->clone ());
}
pocet ++;
ui->tabWidget->addTab (t, QString::number(pocet));
}
delete p;
}
}
}
void MojeOkno::on_actionRun_triggered()
{
ui->tableWidget->clearContents ();
ui->tabWidget->clear ();
for (int i = 0; i <= 7; i++)
pole [i] = 0;
pocet = 0;
umisti (0);
ui->horizontalSlider->setMinimum (1);
ui->horizontalSlider->setMaximum (pocet);
}
void MojeOkno::on_horizontalSlider_sliderMoved(int position)
{
ui->tabWidget->setCurrentIndex (position-1);
}