#ifndef MOJEOKNO_H #define MOJEOKNO_H #include #include #include 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 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); }