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 | } |