Advertisement
Guest User

Untitled

a guest
Aug 22nd, 2012
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.73 KB | None | 0 0
  1. >>>>> graphicpol.h <<<<<<
  2.  
  3. #ifndef GRAPHICPOL_H
  4. #define GRAPHICPOL_H
  5.  
  6. #include <QtGui>
  7. #include <QtSql>
  8.  
  9. QT_BEGIN_NAMESPACE
  10. class QWidget;
  11. QT_END_NAMESPACE
  12.  
  13. class GraphicPol : public QMainWindow
  14. {
  15.     Q_OBJECT
  16.    
  17. public:
  18.     explicit GraphicPol(QWidget *parent = 0);
  19.  
  20. public slots:
  21.     void resizeGraphic(int);
  22.  
  23. private slots:
  24.     void createMDB();
  25.  
  26. private:
  27.     QSqlDatabase mdb;
  28.     QGraphicsView *graphicsView;
  29.     QGraphicsScene *scene;
  30.     QGraphicsLineItem *pLineItem;
  31.     QGraphicsRectItem *pRectItem;
  32.     QWidget *w;
  33.     double rx;
  34.     double ry;
  35.     double rxl;
  36.     double ryl;
  37. };
  38.  
  39. #endif // GRAPHICPOL_H
  40.  
  41. >>>>  graphicpol.cpp <<<<<<<
  42.  
  43. #include "graphicpol.h"
  44. #include <QtSql>
  45. #include <QGraphicsView>
  46. #include <QtGui>
  47.  
  48.  
  49. GraphicPol::GraphicPol(QWidget *parent)
  50.     : QMainWindow(parent)
  51. {
  52.     graphicsView = new QGraphicsView;           // создаём поле в котором будут отражаться элементы (поле вида)
  53.     QVBoxLayout *mainLayout = new QVBoxLayout;  // создаём бокс для расположения элементов
  54.     mainLayout->addWidget(graphicsView);        // добовляем в бокс поле вида
  55.     scene = new QGraphicsScene();               // создаём сцену что бы рисовать
  56.     graphicsView->setScene(scene);              // соединяем вид и сцену
  57.  
  58.     QMessageBox msgBox;                         // создаём элемент для приёма сообщений о соединении
  59.  
  60.     createMDB();                                // вызываем функцию со значениями для соединения с базой
  61.  
  62.     // проверяем соединение с базой
  63.     if (!mdb.open())                            // устанавливаем соединение с базой
  64.     {
  65.         msgBox.setText("Почему-то База не открылась =(");   // если не открылась присваем значение сообщения
  66.         msgBox.exec();                                      // показываем сообщение
  67.     }
  68.  
  69.     QSqlQuery query;                                                // создаём запрос
  70.     query.exec("SELECT * FROM  FL_KS_GH_C WHERE id>1 and id<200");  // пока присваеваем однозначное значение
  71.     query.next();                                                   // так как первая строка пустая переходим к следующей
  72.  
  73.     int i = query.size();                       // i = колличеству полученых заполненых записей
  74.     int x=1;                                    // x = первому шагу
  75.  
  76.     double valR = query.value(3).toDouble();    //
  77.  
  78.     QBrush gbrush(Qt::darkGreen);
  79.     QPen gpen(Qt::darkGreen);
  80.     QBrush rbrush(Qt::red);
  81.     QPen rpen(Qt::red);
  82.  
  83.  
  84.     while (i!=0)
  85.     {
  86.         rx = (valR/query.value(3).toDouble()*100-100)*1000;
  87.         ry = (valR/query.value(6).toDouble()*100-100)*1000;
  88.         rxl = (valR/query.value(4).toDouble()*100-100)*1000;
  89.         ryl = (valR/query.value(5).toDouble()*100-100)*1000;
  90.  //       qDebug() << rxl << ryl;
  91.  
  92.             if(rx>ry)
  93.             {
  94.                 ry=ry-rx;
  95.                 pLineItem = scene->addLine(QLine(x, rxl, x, ryl), gpen);
  96.                 pLineItem->setX(x);
  97.                 pLineItem->setY(rxl);
  98.                 pLineItem->setFlags(QGraphicsItem::ItemIsMovable);
  99. //                qDebug() << "rx>ry"<<rx<<ry;
  100.  
  101.  //               scene->addLine(QLine(x, rxl, x, ryl), gpen);
  102.                 pRectItem = scene->addRect(QRectF(x-1.5, rx, 3, ry), gpen, gbrush);
  103.                 pRectItem->setX(x);
  104.                 pRectItem->setY(rxl);
  105.                 pRectItem->setFlags(QGraphicsItem::ItemIsMovable);
  106.             }
  107.             else
  108.             {
  109.                 if(rx==ry)
  110.                 {
  111.                     pLineItem = scene->addLine(QLine(x-1.5, rxl, x+3, rxl), gpen);
  112.                     pLineItem->setX(x);
  113.                     pLineItem->setY(rxl);
  114.                     pLineItem->setFlags(QGraphicsItem::ItemIsMovable);
  115. //                    qDebug()<<"rx==ry"<<rx<<ry;
  116.                 }
  117.                 else
  118.                 {
  119.                     rx=rx-ry;
  120.                     pLineItem = scene->addLine(QLine(x, rxl, x, ryl), rpen);
  121.                     pLineItem->setX(x);
  122.                     pLineItem->setY(rxl);
  123.                     pLineItem->setFlags(QGraphicsItem::ItemIsMovable);
  124.                     pRectItem = scene->addRect(QRectF(x-1.5, ry, 3, rx), rpen, rbrush);
  125.                     pRectItem->setX(x);
  126.                     pRectItem->setY(rxl);
  127.                     pRectItem->setFlags(QGraphicsItem::ItemIsMovable);
  128.  //                   qDebug()<<"rx<ry"<<rx<<ry;
  129.                 }
  130.             }
  131.  
  132.         i=i-1;
  133.         x=x+5;
  134.         query.next();
  135.     }
  136.  
  137.     graphicsView->scale(1.0, 0.25);
  138.     graphicsView->centerOn(QPointF(scene->itemsBoundingRect().width(), rxl));
  139.  
  140. //    qDebug() << scene->itemsBoundingRect().width();
  141.  
  142.     w = new QWidget(this); // указатель объявить в описании класса
  143.     w->setLayout(mainLayout);
  144.     this->setCentralWidget(w);
  145.  
  146.     connect(graphicsView->horizontalScrollBar(), SIGNAL(valueChanged(int)), this, SLOT(resizeGraphic(int)));
  147. }
  148.  
  149. void GraphicPol::resizeGraphic(int)
  150. {
  151.     int gvwla, gvhla, gvwra, gvhra;
  152.     int hl = 0;
  153.     int hmax;
  154.     int hmin;
  155.     int i = 0;
  156.     int wl;
  157.  
  158.     qDebug() << "обращение к функции";
  159.     //возвращает координаты углов прямоугольника вида
  160.     QPolygonF prs = graphicsView->mapToScene(QRect(0, 0, graphicsView->viewport()->width(), graphicsView->viewport()->height()));
  161.     //возвращает координаты угла
  162.  
  163.     QPointF p = prs[0];
  164.     gvwla = p.x();
  165.     gvhla = p.y();
  166.     QPointF q = prs[2];
  167.     gvwra = q.x();
  168.     gvhra = q.y();
  169.  
  170.     QList<QGraphicsItem *> items;
  171.     items = scene->items();
  172.  
  173.     wl = items[i]->sceneBoundingRect().x();
  174.     hl = items[i]->sceneBoundingRect().y();
  175.     hmax = hl;
  176.     hmin = hl;
  177.  
  178.     while (wl > 1)
  179.     {
  180.         hl = items[i]->sceneBoundingRect().y();
  181.  //       qDebug() << "cor" << gvwla << gvwra << wl << hl;
  182.  //       qDebug() << items[i]->sceneBoundingRect().x();
  183.  
  184.         if(gvwla<wl && gvwra>wl)
  185.         {
  186.             if(hl>hmax)
  187.             {
  188.                 hmax = hl;
  189.  //               qDebug() << "max" << gvwla << gvwra << wl << hl;
  190.             }
  191.             if(hl<hmin)
  192.             {
  193.                 hmin = hl;
  194. //                qDebug() << "min" << gvwla << gvwra << wl << hl;
  195.             }
  196.         }
  197.         i=i+1;
  198.         wl = items[i]->sceneBoundingRect().x();
  199.     }
  200.  
  201.     int numost0 = gvwla%2;
  202.     int numost1 = gvwra%2;
  203.  
  204.     if((numost0==1 && numost1==1) || (numost0==0 && numost1==0))
  205.     {
  206.         gvwla=gvwla+1;
  207. //        gvwra=gvwra+1;
  208.         numost0 = gvwla%2;
  209.     }
  210.  
  211. //    numost0 = gvwla%2;
  212. //    numost1 = gvwra%2;
  213.  
  214.     int centerVy = (hmax+hmin)/2+1;
  215.     int centerVx = (gvwla+gvwra)/2+1;
  216.  
  217.  
  218.     qDebug() << "gvwla/2" <<numost0 << "gvwra/2" << numost1;
  219. //    qDebug() << prs;
  220. //    qDebug() <<"точки ценртрирования" <<centerVy <<  centerVx;
  221. //    qDebug()<<"мах и мин"<< hmax <<hmin << (hmax+hmin)/2;
  222. //    qDebug()<<"ширена/2" <<gvwla << gvwra << (gvwla+gvwra)/2;
  223.     graphicsView->centerOn(QPointF(centerVx, centerVy));
  224.  
  225. }
  226.  
  227. void GraphicPol::createMDB()
  228. {
  229.     mdb = QSqlDatabase::addDatabase("QMYSQL");
  230.     mdb.setDatabaseName("techan");
  231.     mdb.setUserName("lera");
  232.     mdb.setHostName("localhost");
  233.     mdb.setPassword("NamiAmida");
  234. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement