View difference between Paste ID: xLDNj5wa and JqG6JgNk
SHOW: | | - or go back to the newest paste.
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();
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-
    while (i!=0)
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-
        i=i-1;
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-
        i=i+1;
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
}