Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- >>>>> graphicpol.h <<<<<<
- #ifndef GRAPHICPOL_H
- #define GRAPHICPOL_H
- #include <QtGui>
- #include <QtSql>
- QT_BEGIN_NAMESPACE
- class QWidget;
- QT_END_NAMESPACE
- class GraphicPol : public QMainWindow
- {
- Q_OBJECT
- public:
- explicit GraphicPol(QWidget *parent = 0);
- public slots:
- void resizeGraphic(int);
- private slots:
- void createMDB(); ******* bool create... проверить то надо подключение
- private:
- QSqlDatabase mdb;
- QGraphicsView *graphicsView;
- QGraphicsScene *scene;
- QGraphicsLineItem *pLineItem;
- QGraphicsRectItem *pRectItem;
- QWidget *w;
- double rx;
- double ry;
- double rxl;
- double ryl;
- };
- #endif // GRAPHICPOL_H
- >>>> graphicpol.cpp <<<<<<<
- #include "graphicpol.h"
- #include <QtSql>
- #include <QGraphicsView>
- #include <QtGui>
- GraphicPol::GraphicPol(QWidget *parent)
- : QMainWindow(parent)
- {
- graphicsView = new QGraphicsView; // создаём поле в котором будут отражаться элементы (поле вида)
- QVBoxLayout *mainLayout = new QVBoxLayout; // создаём бокс для расположения элементов
- mainLayout->addWidget(graphicsView); // добовляем в бокс поле вида
- scene = new QGraphicsScene(); // создаём сцену что бы рисовать
- graphicsView->setScene(scene); // соединяем вид и сцену
- QMessageBox msgBox; // создаём элемент для приёма сообщений о соединении
- createMDB(); // вызываем функцию со значениями для соединения с базой
- // проверяем соединение с базой
- if (!mdb.open()) // устанавливаем соединение с базой
- {
- msgBox.setText("Почему-то База не открылась =("); // если не открылась присваем значение сообщения
- msgBox.exec(); // показываем сообщение
- }
- QSqlQuery query; // создаём запрос
- query.exec("SELECT * FROM FL_KS_GH_C WHERE id>1 and id<200"); // пока присваеваем однозначное значение
- *********** sql запрос должен оканчиваться ";" и где проверка успешности запроса? Может быть ошибка. Проверяем if( query.exec...) или isValid, isActive...
- query.next(); // так как первая строка пустая переходим к следующей
- *********** а если нет ? а если next нет, то есть одна запись - проверять надо. Сначала first(), смотри описание
- int i = query.size(); // i = колличеству полученых заполненых записей
- int x=1; // x = первому шагу
- double valR = query.value(3).toDouble(); //
- QBrush gbrush(Qt::darkGreen);
- QPen gpen(Qt::darkGreen);
- QBrush rbrush(Qt::red);
- QPen rpen(Qt::red);
- while (i!=0) ********* цикл лучше по if(next() == true) - в конце цикла;
- {
- rx = (valR/query.value(3).toDouble()*100-100)*1000;
- ry = (valR/query.value(6).toDouble()*100-100)*1000;
- rxl = (valR/query.value(4).toDouble()*100-100)*1000;
- ryl = (valR/query.value(5).toDouble()*100-100)*1000;
- // qDebug() << rxl << ryl;
- if(rx>ry)
- {
- ry=ry-rx;
- pLineItem = scene->addLine(QLine(x, rxl, x, ryl), gpen);
- pLineItem->setX(x);
- pLineItem->setY(rxl);
- pLineItem->setFlags(QGraphicsItem::ItemIsMovable);
- // qDebug() << "rx>ry"<<rx<<ry;
- // scene->addLine(QLine(x, rxl, x, ryl), gpen);
- pRectItem = scene->addRect(QRectF(x-1.5, rx, 3, ry), gpen, gbrush);
- pRectItem->setX(x);
- pRectItem->setY(rxl);
- pRectItem->setFlags(QGraphicsItem::ItemIsMovable);
- }
- else
- {
- if(rx==ry)
- {
- pLineItem = scene->addLine(QLine(x-1.5, rxl, x+3, rxl), gpen);
- pLineItem->setX(x);
- pLineItem->setY(rxl);
- pLineItem->setFlags(QGraphicsItem::ItemIsMovable);
- // qDebug()<<"rx==ry"<<rx<<ry;
- }
- else
- {
- rx=rx-ry;
- pLineItem = scene->addLine(QLine(x, rxl, x, ryl), rpen);
- pLineItem->setX(x);
- pLineItem->setY(rxl);
- pLineItem->setFlags(QGraphicsItem::ItemIsMovable);
- pRectItem = scene->addRect(QRectF(x-1.5, ry, 3, rx), rpen, rbrush);
- pRectItem->setX(x);
- pRectItem->setY(rxl);
- pRectItem->setFlags(QGraphicsItem::ItemIsMovable);
- // qDebug()<<"rx<ry"<<rx<<ry;
- }
- }
- i=i-1; ********* i--
- x=x+5;
- query.next();
- }
- graphicsView->scale(1.0, 0.25);
- graphicsView->centerOn(QPointF(scene->itemsBoundingRect().width(), rxl));
- // qDebug() << scene->itemsBoundingRect().width();
- w = new QWidget(this); // указатель объявить в описании класса
- w->setLayout(mainLayout);
- this->setCentralWidget(w);
- connect(graphicsView->horizontalScrollBar(), SIGNAL(valueChanged(int)), this, SLOT(resizeGraphic(int)));
- }
- void GraphicPol::resizeGraphic(int)
- {
- int gvwla, gvhla, gvwra, gvhra;
- int hl = 0;
- int hmax;
- int hmin;
- int i = 0;
- int wl;
- qDebug() << "обращение к функции";
- //возвращает координаты углов прямоугольника вида
- QPolygonF prs = graphicsView->mapToScene(QRect(0, 0, graphicsView->viewport()->width(), graphicsView->viewport()->height()));
- //возвращает координаты угла
- QPointF p = prs[0];
- gvwla = p.x();
- gvhla = p.y();
- QPointF q = prs[2];
- gvwra = q.x();
- gvhra = q.y();
- QList<QGraphicsItem *> items;
- items = scene->items();
- wl = items[i]->sceneBoundingRect().x();
- hl = items[i]->sceneBoundingRect().y();
- hmax = hl;
- hmin = hl;
- while (wl > 1)
- {
- hl = items[i]->sceneBoundingRect().y();
- // qDebug() << "cor" << gvwla << gvwra << wl << hl;
- // qDebug() << items[i]->sceneBoundingRect().x();
- if(gvwla<wl && gvwra>wl)
- {
- if(hl>hmax)
- {
- hmax = hl;
- // qDebug() << "max" << gvwla << gvwra << wl << hl;
- }
- if(hl<hmin)
- {
- hmin = hl;
- // qDebug() << "min" << gvwla << gvwra << wl << hl;
- }
- }
- i=i+1; ******** i++;
- wl = items[i]->sceneBoundingRect().x();
- }
- int numost0 = gvwla%2;
- int numost1 = gvwra%2;
- if((numost0==1 && numost1==1) || (numost0==0 && numost1==0))
- {
- gvwla=gvwla+1;
- // gvwra=gvwra+1;
- numost0 = gvwla%2;
- }
- // numost0 = gvwla%2;
- // numost1 = gvwra%2;
- int centerVy = (hmax+hmin)/2+1;
- int centerVx = (gvwla+gvwra)/2+1;
- qDebug() << "gvwla/2" <<numost0 << "gvwra/2" << numost1;
- // qDebug() << prs;
- // qDebug() <<"точки ценртрирования" <<centerVy << centerVx;
- // qDebug()<<"мах и мин"<< hmax <<hmin << (hmax+hmin)/2;
- // qDebug()<<"ширена/2" <<gvwla << gvwra << (gvwla+gvwra)/2;
- graphicsView->centerOn(QPointF(centerVx, centerVy));
- }
- void GraphicPol::createMDB()
- {
- mdb = QSqlDatabase::addDatabase("QMYSQL");
- mdb.setDatabaseName("techan");
- mdb.setUserName("lera");
- mdb.setHostName("localhost");
- mdb.setPassword("NamiAmida");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement