[[pokus4]]
 
#ifndef OKNO_H
#define OKNO_H
 
#include <QMainWindow>
#include <QTableWidget>
#include <QTreeWidgetItem>
 
namespace Ui {
class Okno;
}
 
class Info
{
public:
    int len;
    int from_line;
    int from_col;
 
    Info () : len (-1), from_line (-1), from_col (-1) { }
};
 
const int n = 8;
 
class MyItem : public QTreeWidgetItem
{
public:
    Info pole [n][n];
    int xx, yy;
};
 
 
class Okno : public QMainWindow
{
    Q_OBJECT
 
public:
    explicit Okno(QWidget *parent = 0);
    ~Okno();
 
private slots:
    void on_treeWidget_itemClicked(QTreeWidgetItem *item, int column);
 
    void on_tableWidget_cellDoubleClicked(int row, int column);
 
private:
    Info pole [n][n];
 
    void setupTable (QTableWidget *t);
 
    void jump (int i, int j, int level, MyItem * node);
 
    void search (QTreeWidgetItem * item, int i, int j, int level);
 
 private:
    Ui::Okno *ui;
};
 
#endif // OKNO_H
#include "okno.h"
#include "ui_okno.h"
 
Okno::Okno(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::Okno)
{
    ui->setupUi(this);
 
    setupTable (ui->tableWidget);
    setupTable (ui->stateTable);
 
    jump (0, 0, 1, NULL);
}
 
Okno::~Okno()
{
    delete ui;
}
 
void Okno::setupTable (QTableWidget * t)
{
   t->setColumnCount (n);
   t->setRowCount (n);
 
   int h = t->rowHeight(0);
   for (int i = 0; i < n ; i++)
       t->setColumnWidth (i, h);
}
 
QColor color (int level)
{
    return QColor::fromHsv ((10*level)%360, 250, 250);
}
 
void Okno::jump (int i, int j, int level, MyItem *node)
{
    if (i>=0 && i<n && j>=0 && j<n && level <= 8)
    {
        if (pole[i][j].len < 0 || pole[i][j].len > level)
        {
            pole[i][j].len = level;
 
            QTableWidgetItem * item = new QTableWidgetItem;
            item->setText (QString::number (level));
            item->setBackgroundColor (color (level));
            ui->tableWidget->setItem (i, j, item);
 
            MyItem * above = node;
 
            node = new MyItem;
            node->setText (0, QString::number (level) + " : " +
                              QString::number (i) + " , " +
                              QString::number (j) );
            node->setBackgroundColor (0, color (level));
 
            if (above != NULL)
                above->addChild (node);
            else
                ui->treeWidget->addTopLevelItem (node);
 
            if (above)
            {
                pole[i][j].from_line = above->xx;
                pole[i][j].from_col = above->yy;
                item->setToolTip(QString::number (above->xx) + "," +
                                 QString::number (above->yy)
                                  );
            }
 
            for (int x = 0; x < n; x++)
                for (int y = 0; y < n; y++)
                    node->pole[x][y] = pole[x][y];
 
            node->xx = i;
            node->yy = j;
 
 
            jump (i+2, j+1, level+1, node);
            jump (i+2, j-1, level+1, node);
            jump (i-2, j+1, level+1, node);
            jump (i-2, j-1, level+1, node);
 
            jump (i+1, j+2, level+1, node);
            jump (i+1, j-2, level+1, node);
            jump (i-1, j+2, level+1, node);
            jump (i-1, j-2, level+1, node);
        }
    }
}
 
void Okno::search(QTreeWidgetItem *item, int i, int j, int level)
{
    MyItem * node = dynamic_cast <MyItem*> (item);
    if (node != NULL)
    {
        if (node->xx == i && node->yy == j &&
                node->pole[i][j].len == level)
        {
            node->setSelected (true);
            on_treeWidget_itemClicked (node, 0);
        }
        else
        {
            int k = node->childCount();
            for (int t = 0 ; t < k ; t++)
                search (node->child(t), i, j, level);
        }
    }
 
}
 
void Okno::on_treeWidget_itemClicked(QTreeWidgetItem *item, int column)
{
    MyItem * node = dynamic_cast <MyItem*> (item);
    if (node != NULL)
    {
        ui->stateTable->clearContents ();
 
        for (int x = 0; x < n; x++)
            for (int y = 0; y < n; y++)
            {
                Info info = node->pole[x][y];
                int level = info.len;
 
                if (level >= 0)
                {
                   QTableWidgetItem * item = new QTableWidgetItem;
                   item->setText (QString::number (level));
                   item->setBackgroundColor (color (level));
                   item->setToolTip(QString::number (info.from_line) + "," +
                                    QString::number (info.from_col) );
                   ui->stateTable->setItem (x, y, item);
                }
            }
    }
}
 
void Okno::on_tableWidget_cellDoubleClicked(int row, int column)
{
    search (ui->treeWidget->topLevelItem(0),
            row, column, pole[row][column].len);
}
const int n = 8;
 
class MyItem : public QTreeWidgetItem
{
public:
    Info pole [n][n];
};
            QTableWidgetItem * item = new QTableWidgetItem;
            item->setText (QString::number (level));
            item->setBackgroundColor (color (level));
            ui->tableWidget->setItem (i, j, item);
 
            MyItem * above = node;
 
            node = new MyItem;
            node->setText (0, QString::number (level) + " : " +
                              QString::number (i) + " , " +
                              QString::number (j) );
            node->setBackgroundColor (0, color (level));
 
            if (above != NULL)
                above->addChild (node);
            else
                ui->treeWidget->addTopLevelItem (node);
 
            for (int x = 0; x < n; x++)
                for (int y = 0; y < n; y++)
                    node->pole[x][y] = pole[x][y];
void Okno::on_treeWidget_itemClicked(QTreeWidgetItem *item, int column)
{
    MyItem * node = dynamic_cast <MyItem*> (item);
    if (node != NULL)
    {
        ui->stateTable->clearContents ();
 
        for (int x = 0; x < n; x++)
            for (int y = 0; y < n; y++)
            {
                Info info = node->pole[x][y];
                int level = info.len;
 
                if (level >= 0)
                {
                   QTableWidgetItem * item = new QTableWidgetItem;
                   item->setText (QString::number (level));
                   item->setBackgroundColor (color (level));
                   ui->stateTable->setItem (x, y, item);
                }
            }
    }
}
            if (above)
            {
                pole[i][j].from_line = above->xx;
                pole[i][j].from_col = above->yy;
                item->setToolTip(QString::number (above->xx) + "," +
                                 QString::number (above->yy)
                                  );
            }
 
            for (int x = 0; x < n; x++)
                for (int y = 0; y < n; y++)
                    node->pole[x][y] = pole[x][y];
 
            node->xx = i;
            node->yy = j;
 
pokus4.txt · Last modified: 2014/03/10 17:06 by 147.32.8.110
 
Recent changes RSS feed Creative Commons License Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki