Advertisement
Guest User

Untitled

a guest
Aug 22nd, 2012
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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(); ******* bool create... проверить то надо подключение
  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. *********** sql запрос должен оканчиваться ";" и где проверка успешности запроса? Может быть ошибка. Проверяем if( query.exec...) или isValid, isActive...
  72.     query.next();                                                   // так как первая строка пустая переходим к следующей
  73. *********** а если нет ? а если next нет, то есть одна запись - проверять надо. Сначала first(), смотри описание
  74.  
  75.     int i = query.size();                       // i = колличеству полученых заполненых записей
  76.     int x=1;                                    // x = первому шагу
  77.  
  78.     double valR = query.value(3).toDouble();    //
  79.  
  80.     QBrush gbrush(Qt::darkGreen);
  81.     QPen gpen(Qt::darkGreen);
  82.     QBrush rbrush(Qt::red);
  83.     QPen rpen(Qt::red);
  84.  
  85.  
  86.     while (i!=0) ********* цикл лучше по if(next() == true) - в конце цикла;
  87.     {
  88.         rx = (valR/query.value(3).toDouble()*100-100)*1000;
  89.         ry = (valR/query.value(6).toDouble()*100-100)*1000;
  90.         rxl = (valR/query.value(4).toDouble()*100-100)*1000;
  91.         ryl = (valR/query.value(5).toDouble()*100-100)*1000;
  92.  //       qDebug() << rxl << ryl;
  93.  
  94.             if(rx>ry)
  95.             {
  96.                 ry=ry-rx;
  97.                 pLineItem = scene->addLine(QLine(x, rxl, x, ryl), gpen);
  98.                 pLineItem->setX(x);
  99.                 pLineItem->setY(rxl);
  100.                 pLineItem->setFlags(QGraphicsItem::ItemIsMovable);
  101. //                qDebug() << "rx>ry"<<rx<<ry;
  102.  
  103.  //               scene->addLine(QLine(x, rxl, x, ryl), gpen);
  104.                 pRectItem = scene->addRect(QRectF(x-1.5, rx, 3, ry), gpen, gbrush);
  105.                 pRectItem->setX(x);
  106.                 pRectItem->setY(rxl);
  107.                 pRectItem->setFlags(QGraphicsItem::ItemIsMovable);
  108.             }
  109.             else
  110.             {
  111.                 if(rx==ry)
  112.                 {
  113.                     pLineItem = scene->addLine(QLine(x-1.5, rxl, x+3, rxl), gpen);
  114.                     pLineItem->setX(x);
  115.                     pLineItem->setY(rxl);
  116.                     pLineItem->setFlags(QGraphicsItem::ItemIsMovable);
  117. //                    qDebug()<<"rx==ry"<<rx<<ry;
  118.                 }
  119.                 else
  120.                 {
  121.                     rx=rx-ry;
  122.                     pLineItem = scene->addLine(QLine(x, rxl, x, ryl), rpen);
  123.                     pLineItem->setX(x);
  124.                     pLineItem->setY(rxl);
  125.                     pLineItem->setFlags(QGraphicsItem::ItemIsMovable);
  126.                     pRectItem = scene->addRect(QRectF(x-1.5, ry, 3, rx), rpen, rbrush);
  127.                     pRectItem->setX(x);
  128.                     pRectItem->setY(rxl);
  129.                     pRectItem->setFlags(QGraphicsItem::ItemIsMovable);
  130.  //                   qDebug()<<"rx<ry"<<rx<<ry;
  131.                 }
  132.             }
  133.  
  134.         i=i-1; ********* i--
  135.         x=x+5;
  136.         query.next();
  137.     }
  138.  
  139.     graphicsView->scale(1.0, 0.25);
  140.     graphicsView->centerOn(QPointF(scene->itemsBoundingRect().width(), rxl));
  141.  
  142. //    qDebug() << scene->itemsBoundingRect().width();
  143.  
  144.     w = new QWidget(this); // указатель объявить в описании класса
  145.     w->setLayout(mainLayout);
  146.     this->setCentralWidget(w);
  147.  
  148.     connect(graphicsView->horizontalScrollBar(), SIGNAL(valueChanged(int)), this, SLOT(resizeGraphic(int)));
  149. }
  150.  
  151. void GraphicPol::resizeGraphic(int)
  152. {
  153.     int gvwla, gvhla, gvwra, gvhra;
  154.     int hl = 0;
  155.     int hmax;
  156.     int hmin;
  157.     int i = 0;
  158.     int wl;
  159.  
  160.     qDebug() << "обращение к функции";
  161.     //возвращает координаты углов прямоугольника вида
  162.     QPolygonF prs = graphicsView->mapToScene(QRect(0, 0, graphicsView->viewport()->width(), graphicsView->viewport()->height()));
  163.     //возвращает координаты угла
  164.  
  165.     QPointF p = prs[0];
  166.     gvwla = p.x();
  167.     gvhla = p.y();
  168.     QPointF q = prs[2];
  169.     gvwra = q.x();
  170.     gvhra = q.y();
  171.  
  172.     QList<QGraphicsItem *> items;
  173.     items = scene->items();
  174.  
  175.     wl = items[i]->sceneBoundingRect().x();
  176.     hl = items[i]->sceneBoundingRect().y();
  177.     hmax = hl;
  178.     hmin = hl;
  179.  
  180.     while (wl > 1)
  181.     {
  182.         hl = items[i]->sceneBoundingRect().y();
  183.  //       qDebug() << "cor" << gvwla << gvwra << wl << hl;
  184.  //       qDebug() << items[i]->sceneBoundingRect().x();
  185.  
  186.         if(gvwla<wl && gvwra>wl)
  187.         {
  188.             if(hl>hmax)
  189.             {
  190.                 hmax = hl;
  191.  //               qDebug() << "max" << gvwla << gvwra << wl << hl;
  192.             }
  193.             if(hl<hmin)
  194.             {
  195.                 hmin = hl;
  196. //                qDebug() << "min" << gvwla << gvwra << wl << hl;
  197.             }
  198.         }
  199.         i=i+1; ******** i++;
  200.         wl = items[i]->sceneBoundingRect().x();
  201.     }
  202.  
  203.     int numost0 = gvwla%2;
  204.     int numost1 = gvwra%2;
  205.  
  206.     if((numost0==1 && numost1==1) || (numost0==0 && numost1==0))
  207.     {
  208.         gvwla=gvwla+1;
  209. //        gvwra=gvwra+1;
  210.         numost0 = gvwla%2;
  211.     }
  212.  
  213. //    numost0 = gvwla%2;
  214. //    numost1 = gvwra%2;
  215.  
  216.     int centerVy = (hmax+hmin)/2+1;
  217.     int centerVx = (gvwla+gvwra)/2+1;
  218.  
  219.  
  220.     qDebug() << "gvwla/2" <<numost0 << "gvwra/2" << numost1;
  221. //    qDebug() << prs;
  222. //    qDebug() <<"точки ценртрирования" <<centerVy <<  centerVx;
  223. //    qDebug()<<"мах и мин"<< hmax <<hmin << (hmax+hmin)/2;
  224. //    qDebug()<<"ширена/2" <<gvwla << gvwra << (gvwla+gvwra)/2;
  225.     graphicsView->centerOn(QPointF(centerVx, centerVy));
  226.  
  227. }
  228.  
  229. void GraphicPol::createMDB()
  230. {
  231.     mdb = QSqlDatabase::addDatabase("QMYSQL");
  232.     mdb.setDatabaseName("techan");
  233.     mdb.setUserName("lera");
  234.     mdb.setHostName("localhost");
  235.     mdb.setPassword("NamiAmida");
  236. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement