개정판 55765a6c
Split line when inserting symbol
Delete SymbolSvgItem
DTI_PID/DTI_PID/LineNoTracer.py | ||
---|---|---|
66 | 66 |
minDist = None |
67 | 67 |
startLine = None |
68 | 68 |
for line in self.lines: |
69 |
dist = line.distanceTo(lineno.center())
|
|
69 |
dist = line.distanceTo((lineno.center().x(), lineno.center().y()))
|
|
70 | 70 |
if minDist is None: |
71 | 71 |
minDist = dist |
72 | 72 |
startLine = line |
DTI_PID/DTI_PID/MainWindow.py | ||
---|---|---|
283 | 283 |
|
284 | 284 |
''' |
285 | 285 |
@brief create a line |
286 |
@author humkyung |
|
286 | 287 |
''' |
287 | 288 |
def createLine(self): |
288 | 289 |
# set imageviewer's command |
... | ... | |
370 | 371 |
lines.append(processLine) |
371 | 372 |
for pt in pts: |
372 | 373 |
processLine._pol.append(QPointF(pt[0] + round(area.x), pt[1] + round(area.y))) |
373 |
processLine._path.addPolygon(processLine._pol) |
|
374 |
processLine.setPath(processLine._path) |
|
374 |
processLine.buildPath() |
|
375 | 375 |
processLine.setPen(QPen(Qt.blue, 5, Qt.SolidLine)) |
376 | 376 |
self.graphicsView.scene.addItem(processLine) |
377 | 377 |
|
... | ... | |
441 | 441 |
#### lambda param=svg : bind 'svg' object to lambda('param') |
442 | 442 |
#### If case of 'lambda svg=svg:', function uses the 'svg' value bound to lambda |
443 | 443 |
svg.clicked.connect(lambda param=svg: self.resultTreeWidget.findItem(param)) |
444 |
svg.removed.connect(self.resultTreeWidget.itemRemoved) |
|
444 | 445 |
|
445 | 446 |
transform = QTransform() |
446 | 447 |
if (1.57 == angle) or (4.71 == angle): |
DTI_PID/DTI_PID/QResultTreeWidget.py | ||
---|---|---|
139 | 139 |
self.lastClickedItem = graphicItem |
140 | 140 |
|
141 | 141 |
''' |
142 |
@brief find item which has data is given item |
|
143 |
@author humkyung |
|
144 |
@date 2018.04.23 |
|
145 |
''' |
|
146 |
def findItemByData(self, item): |
|
147 |
if type(item) is SymbolSvgItem: |
|
148 |
foundItems = self.findItems(item.name, Qt.MatchExactly|Qt.MatchRecursive, 0) |
|
149 |
for foundItem in foundItems: |
|
150 |
data = foundItem.data(0, self.TREE_DATA_ROLE) |
|
151 |
if data is not None and data is item: |
|
152 |
return foundItem |
|
153 |
elif type(item) is QEngineeringTextItem: |
|
154 |
foundItems = self.findItems(item.text() , Qt.MatchExactly|Qt.MatchRecursive, 0) |
|
155 |
for foundItem in foundItems: |
|
156 |
data = foundItem.data(0, self.TREE_DATA_ROLE) |
|
157 |
if data is not None and data is item: |
|
158 |
return foundItem |
|
159 |
|
|
160 |
return None |
|
161 |
|
|
162 |
''' |
|
142 | 163 |
@brief Find QTreeWidgetItem by SymbolSvgItem object |
143 | 164 |
@author Jeongwoo |
144 | 165 |
@date 18.04.11 |
... | ... | |
157 | 178 |
self.itemClickEvent(fItem, 0, True) |
158 | 179 |
return |
159 | 180 |
## Not found |
160 |
QMessageBox.about(self.ui.buttonBox, "알림", "선택하신 심볼의 데이터를 찾을 수 없습니다.") |
|
181 |
QMessageBox.about(self.ui.buttonBox, "알림", "선택하신 심볼의 데이터를 찾을 수 없습니다.") |
|
182 |
|
|
183 |
''' |
|
184 |
@brief remove given item |
|
185 |
@author humkyung |
|
186 |
@date 2018.04.23 |
|
187 |
''' |
|
188 |
@pyqtSlot(SymbolSvgItem) |
|
189 |
def itemRemoved(self, item): |
|
190 |
foundItem = self.findItemByData(item) |
|
191 |
if foundItem is not None: |
|
192 |
foundItem.parent().removeChild(foundItem) |
DTI_PID/DTI_PID/QtImageViewer.py | ||
---|---|---|
46 | 46 |
rightMouseButtonReleased = pyqtSignal(float, float) |
47 | 47 |
leftMouseButtonDoubleClicked = pyqtSignal(float, float) |
48 | 48 |
rightMouseButtonDoubleClicked = pyqtSignal(float, float) |
49 |
itemRemoved = pyqtSignal(SymbolSvgItem) |
|
49 | 50 |
|
50 | 51 |
def __init__(self): |
51 | 52 |
QGraphicsView.__init__(self) |
... | ... | |
279 | 280 |
self.rightMouseButtonDoubleClicked.emit(scenePos.x(), scenePos.y()) |
280 | 281 |
QGraphicsView.mouseDoubleClickEvent(self, event) |
281 | 282 |
|
283 |
''' |
|
284 |
@brief key press event |
|
285 |
@author Jeongwoo |
|
286 |
@date 2018.??.?? |
|
287 |
''' |
|
282 | 288 |
def keyPressEvent(self, event): |
283 | 289 |
if event.key() == Qt.Key_Control: |
284 | 290 |
self.isPressCtrl = True |
285 |
print("Pressed Ctrl") |
|
291 |
elif event.key() == Qt.Key_Delete: |
|
292 |
pass |
|
293 |
|
|
294 |
QGraphicsView.keyPressEvent(self, event) |
|
286 | 295 |
|
296 |
''' |
|
297 |
@brief key release event |
|
298 |
@author Jeongwoo |
|
299 |
@date 2018.??.?? |
|
300 |
''' |
|
287 | 301 |
def keyReleaseEvent(self, event): |
288 | 302 |
if event.key() == Qt.Key_Control: |
289 | 303 |
self.isPressCtrl = False |
290 |
print("Released Ctrl") |
|
304 |
elif event.key() == Qt.Key_Delete: |
|
305 |
pass |
|
306 |
|
|
307 |
QGraphicsView.keyReleaseEvent(self, event) |
|
291 | 308 |
|
292 | 309 |
def wheelEvent(self, event): |
293 | 310 |
if self.isPressCtrl == True: |
DTI_PID/DTI_PID/Shapes/QEngineeringLineItem.py | ||
---|---|---|
4 | 4 |
try: |
5 | 5 |
from PyQt5.QtCore import Qt, QPointF, QRectF, pyqtSignal, QT_VERSION_STR |
6 | 6 |
from PyQt5.QtGui import QImage, QPixmap, QPainterPath, QBrush, QPen, QTransform |
7 |
from PyQt5.QtWidgets import QGraphicsView, QGraphicsScene, QFileDialog, QGraphicsItem, QAbstractGraphicsShapeItem |
|
7 |
from PyQt5.QtWidgets import QGraphicsView, QGraphicsScene, QFileDialog, QGraphicsItem, QAbstractGraphicsShapeItem, QGraphicsPathItem
|
|
8 | 8 |
except ImportError: |
9 | 9 |
try: |
10 | 10 |
from PyQt4.QtCore import Qt, QRectF, pyqtSignal, QT_VERSION_STR |
... | ... | |
16 | 16 |
from QGraphicsBoundingBoxItem import QGraphicsBoundingBoxItem |
17 | 17 |
|
18 | 18 |
class QEngineeringLineItem(QGraphicsPolylineItem): |
19 |
removed = pyqtSignal(QGraphicsPathItem) |
|
20 |
|
|
19 | 21 |
def __init__(self, parent=None): |
20 | 22 |
QGraphicsPolylineItem.__init__(self, parent) |
21 | 23 |
|
22 | 24 |
self.conns = [None, None] |
23 | 25 |
|
24 | 26 |
self.setPen(QPen(Qt.blue, 5, Qt.SolidLine)) |
25 |
self.setFlags(QGraphicsItem.ItemIsSelectable) |
|
27 |
self.setFlags(QGraphicsItem.ItemIsSelectable|QGraphicsItem.ItemIsFocusable)
|
|
26 | 28 |
|
27 | 29 |
self.setAcceptHoverEvents(True) |
30 |
self.setAcceptTouchEvents(True) |
|
28 | 31 |
|
29 | 32 |
''' |
30 | 33 |
@brief construct a ProcessLineItem |
... | ... | |
160 | 163 |
@date 2018.04.22 |
161 | 164 |
''' |
162 | 165 |
def insertSymbol(self, symbol, pos): |
166 |
import math |
|
163 | 167 |
from shapely.geometry import Point |
164 | 168 |
from shapely import affinity |
165 | 169 |
|
... | ... | |
172 | 176 |
transform.rotateRadians(-angle) |
173 | 177 |
transform.translate(-symbol.origin[0], -symbol.origin[1]) |
174 | 178 |
symbol.setTransform(transform) |
175 |
for i in range(len(symbol.connPts)): |
|
176 |
rotatedPt = affinity.rotate(Point(symbol.connPts[i][0], symbol.connPts[i][1]), -angle, Point(symbol.origin[0], symbol.origin[1]), use_radians=True) |
|
177 |
symbol.connPts[i] = (origin.x+rotatedPt.x, origin.y+rotatedPt.y) |
|
179 |
if 2 == len(symbol.connPts): # 2 way component |
|
180 |
for i in range(len(symbol.connPts)): |
|
181 |
rotatedPt = affinity.rotate(Point(symbol.connPts[i][0] - symbol.origin[0], symbol.connPts[i][1] - symbol.origin[1]), -angle, Point(0, 0), use_radians=True) |
|
182 |
symbol.connPts[i] = (origin.x+rotatedPt.x, origin.y+rotatedPt.y) |
|
183 |
|
|
184 |
dx1 = symbol.connPts[0][0] - self.startPoint()[0] |
|
185 |
dy1 = symbol.connPts[0][1] - self.startPoint()[1] |
|
186 |
length1 = math.sqrt(dx1*dx1 + dy1*dy1) |
|
187 |
dx2 = symbol.connPts[1][0] - self.startPoint()[0] |
|
188 |
dy2 = symbol.connPts[1][1] - self.startPoint()[1] |
|
189 |
length2 = math.sqrt(dx2*dx2 + dy2*dy2) |
|
190 |
|
|
191 |
if length1 < length2: |
|
192 |
processLine = QEngineeringLineItem() |
|
193 |
processLine._pol.append(QPointF(symbol.connPts[1][0], symbol.connPts[1][1])) |
|
194 |
processLine._pol.append(QPointF(self.endPoint()[0], self.endPoint()[1])) |
|
195 |
processLine.buildPath() |
|
196 |
processLine.setPen(QPen(Qt.blue, 5, Qt.SolidLine)) |
|
197 |
processLine.conns.append(symbol) |
|
198 |
processLine.conns.append(self.conns[1]) |
|
199 |
self.scene().addItem(processLine) |
|
200 |
|
|
201 |
self._pol.replace(self._pol.count() - 1, QPointF(symbol.connPts[0][0], symbol.connPts[0][1])) |
|
202 |
self.conns[1] = symbol |
|
203 |
|
|
204 |
symbol.conns = [] |
|
205 |
symbol.conns.append(self) |
|
206 |
symbol.conns.append(processLine) |
|
207 |
else: |
|
208 |
processLine = QEngineeringLineItem() |
|
209 |
processLine._pol.append(QPointF(symbol.connPts[0][0], symbol.connPts[0][1])) |
|
210 |
processLine._pol.append(QPointF(self.endPoint()[0], self.endPoint()[1])) |
|
211 |
processLine.buildPath() |
|
212 |
processLine.setPen(QPen(Qt.blue, 5, Qt.SolidLine)) |
|
213 |
processLine.conns.append(symbol) |
|
214 |
processLine.conns.append(self.conns[1]) |
|
215 |
self.scene().addItem(processLine) |
|
216 |
|
|
217 |
self._pol.replace(self._pol.count() - 1, QPointF(symbol.connPts[1][0], symbol.connPts[1][1])) |
|
218 |
self.conns[1] = symbol |
|
219 |
|
|
220 |
symbol.conns = [] |
|
221 |
symbol.conns.append(processLine) |
|
222 |
symbol.conns.append(self) |
|
223 |
|
|
224 |
self.buildPath() |
|
225 |
self.update() |
|
226 |
|
|
178 | 227 |
symbol.loc = [origin.x - symbol.origin[0], origin.y - symbol.origin[1]] |
179 | 228 |
symbol.size = [symbol.boundingRect().width(), symbol.boundingRect().height()] |
180 | 229 |
self.scene().addItem(symbol) |
181 |
|
|
230 |
|
|
231 |
''' |
|
232 |
@brief remove symbol |
|
233 |
@author humkyung |
|
234 |
@date 2018.04.23 |
|
235 |
''' |
|
236 |
def removeSymbol(self, symbol): |
|
237 |
import math |
|
238 |
|
|
239 |
if 2 == len(symbol.conns): # 2-way component |
|
240 |
connected = symbol.conns[0] if symbol.conns[0] is not self else symbol.conns[1] |
|
241 |
|
|
242 |
pts = [] |
|
243 |
pts.append(self.startPoint()) |
|
244 |
pts.append(self.endPoint()) |
|
245 |
pts.append(connected.startPoint()) |
|
246 |
pts.append(connected.endPoint()) |
|
247 |
|
|
248 |
self.scene().removeItem(connected) |
|
249 |
|
|
250 |
start = None |
|
251 |
end = None |
|
252 |
maxDist = None |
|
253 |
for i in range(len(pts)): |
|
254 |
for j in range(i+1,len(pts)): |
|
255 |
dx = pts[i][0] - pts[j][0] |
|
256 |
dy = pts[i][1] - pts[j][1] |
|
257 |
dist = math.sqrt(dx*dx + dy*dy) |
|
258 |
if maxDist is None: |
|
259 |
maxDist = dist |
|
260 |
start = pts[i] |
|
261 |
end = pts[j] |
|
262 |
elif dist > maxDist: |
|
263 |
maxDist = dist |
|
264 |
start = pts[i] |
|
265 |
end = pts[j] |
|
266 |
|
|
267 |
if (pts[0] == end) or (pts[1] == start): start,end = end,start |
|
268 |
|
|
269 |
self._pol.clear() |
|
270 |
self._pol.append(QPointF(start[0], end[1])) |
|
271 |
self._pol.append(QPointF(end[0], end[1])) |
|
272 |
self.buildPath() |
|
273 |
self.update() |
|
274 |
|
|
182 | 275 |
def hoverEnterEvent(self, event): |
183 | 276 |
pass |
184 | 277 |
|
... | ... | |
186 | 279 |
pass |
187 | 280 |
|
188 | 281 |
def hoverMoveEvent(self, event): |
189 |
pass |
|
282 |
pass |
|
283 |
|
|
284 |
''' |
|
285 |
@brief remove item when user press delete key |
|
286 |
@author humkyung |
|
287 |
@date 2018.04.23 |
|
288 |
''' |
|
289 |
def keyPressEvent(self, event): |
|
290 |
if event.key() == Qt.Key_Delete: |
|
291 |
self.removed.emit(self) |
|
292 |
self.scene().removeItem(self) |
DTI_PID/DTI_PID/Shapes/QEngineeringTextItem.py | ||
---|---|---|
16 | 16 |
from QGraphicsBoundingBoxItem import QGraphicsBoundingBoxItem |
17 | 17 |
|
18 | 18 |
class QEngineeringTextItem(QGraphicsTextItem): |
19 |
removed = pyqtSignal(QGraphicsTextItem) |
|
20 |
|
|
19 | 21 |
def __init__(self, parent=None): |
20 | 22 |
QGraphicsTextItem.__init__(self, parent) |
21 | 23 |
|
22 | 24 |
self.loc = None |
23 | 25 |
self.size = None |
24 | 26 |
self.conns = [] |
25 |
self.setFlags(QGraphicsItem.ItemIsSelectable) |
|
27 |
self.setFlags(QGraphicsItem.ItemIsSelectable|QGraphicsItem.ItemIsFocusable)
|
|
26 | 28 |
self.setAcceptHoverEvents(True) |
29 |
self.setAcceptTouchEvents(True) |
|
27 | 30 |
|
28 | 31 |
''' |
29 | 32 |
@brief return text string |
... | ... | |
48 | 51 |
pass |
49 | 52 |
|
50 | 53 |
def hoverMoveEvent(self, event): |
51 |
pass |
|
54 |
pass |
|
55 |
|
|
56 |
''' |
|
57 |
@brief remove item when user press delete key |
|
58 |
@author humkyung |
|
59 |
@date 2018.04.23 |
|
60 |
''' |
|
61 |
def keyPressEvent(self, event): |
|
62 |
if event.key() == Qt.Key_Delete: |
|
63 |
self.removed.emit(self) |
|
64 |
self.scene().removeItem(self) |
DTI_PID/DTI_PID/Shapes/QGraphicsPolylineItem.py | ||
---|---|---|
14 | 14 |
class QGraphicsPolylineItem(QGraphicsPathItem): |
15 | 15 |
def __init__(self, parent=None): |
16 | 16 |
QGraphicsPathItem.__init__(self, parent) |
17 |
#self.setFlag(QGraphicsItem.ItemIsMovable) |
|
18 |
self.setFlags(QGraphicsItem.ItemIsSelectable) |
|
17 |
self.setFlags(QGraphicsItem.ItemIsSelectable|QGraphicsItem.ItemIsFocusable) |
|
19 | 18 |
#self.setBrush(QBrush(Qt.red)) |
20 | 19 |
|
21 | 20 |
self._vertices = [] |
22 | 21 |
self.isCreated = False |
23 | 22 |
self._pt = None |
24 | 23 |
self._pol = QPolygonF() |
25 |
self._path = QPainterPath()
|
|
24 |
self._path = None
|
|
26 | 25 |
|
27 | 26 |
''' |
28 | 27 |
@brief construct a polyline |
... | ... | |
50 | 49 |
self.isCreated = False |
51 | 50 |
|
52 | 51 |
''' |
52 |
@build build path |
|
53 |
@author humkyung |
|
54 |
@date 2018.04.23 |
|
55 |
''' |
|
56 |
def buildPath(self): |
|
57 |
self._path = QPainterPath() |
|
58 |
self._path.addPolygon(self._pol) |
|
59 |
self.setPath(self._path) |
|
60 |
|
|
61 |
''' |
|
53 | 62 |
@brief return start point |
54 | 63 |
@author humkyung |
55 | 64 |
@date 2018.04.16 |
DTI_PID/DTI_PID/Shapes/SymbolSvgItem.py | ||
---|---|---|
11 | 11 |
|
12 | 12 |
class SymbolSvgItem(QGraphicsSvgItem): |
13 | 13 |
clicked = pyqtSignal(QGraphicsSvgItem) |
14 |
removed = pyqtSignal(QGraphicsSvgItem) |
|
14 | 15 |
|
15 | 16 |
''' |
16 | 17 |
@history 18.04.11 Jeongwoo Add Variable (Name, Type) |
... | ... | |
18 | 19 |
def __init__(self, path): |
19 | 20 |
super(SymbolSvgItem, self).__init__(path) |
20 | 21 |
|
21 |
self.setFlags(QGraphicsItem.ItemIsSelectable| |
|
22 |
QGraphicsItem.ItemIsMovable) |
|
22 |
self.setFlags(QGraphicsItem.ItemIsSelectable|QGraphicsItem.ItemIsFocusable)
|
|
23 |
#QGraphicsItem.ItemIsMovable)
|
|
23 | 24 |
|
24 | 25 |
self.name = '' |
25 | 26 |
self.type = '' |
... | ... | |
30 | 31 |
|
31 | 32 |
self.setAcceptHoverEvents(True) |
32 | 33 |
self.setAcceptedMouseButtons(Qt.LeftButton) |
34 |
self.setAcceptTouchEvents(True) |
|
33 | 35 |
|
34 | 36 |
''' |
35 | 37 |
@brief return bounding box of symbol |
... | ... | |
108 | 110 |
self.clicked.emit(self) |
109 | 111 |
|
110 | 112 |
''' |
113 |
@brief remove item when user press delete key |
|
114 |
@author humkyung |
|
115 |
@date 2018.04.23 |
|
116 |
''' |
|
117 |
def keyPressEvent(self, event): |
|
118 |
if event.key() == Qt.Key_Delete: |
|
119 |
for conn in self.conns: |
|
120 |
conn.removeSymbol(self) |
|
121 |
break |
|
122 |
|
|
123 |
self.removed.emit(self) |
|
124 |
self.scene().removeItem(self) |
|
125 |
|
|
126 |
''' |
|
111 | 127 |
@brief override paint(draw connection points) |
112 | 128 |
@author humkyung |
113 | 129 |
@date 2018.04.21 |
DTI_PID/DTI_PID/UI/OcrResultDialog.ui | ||
---|---|---|
13 | 13 |
<property name="windowTitle"> |
14 | 14 |
<string>OCR</string> |
15 | 15 |
</property> |
16 |
<widget class="QDialogButtonBox" name="ocrDialogButtonBox"> |
|
17 |
<property name="geometry"> |
|
18 |
<rect> |
|
19 |
<x>450</x> |
|
20 |
<y>370</y> |
|
21 |
<width>341</width> |
|
22 |
<height>32</height> |
|
23 |
</rect> |
|
24 |
</property> |
|
25 |
<property name="orientation"> |
|
26 |
<enum>Qt::Horizontal</enum> |
|
27 |
</property> |
|
28 |
<property name="standardButtons"> |
|
29 |
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set> |
|
30 |
</property> |
|
31 |
</widget> |
|
32 |
<widget class="QWidget" name="gridLayoutWidget"> |
|
33 |
<property name="geometry"> |
|
34 |
<rect> |
|
35 |
<x>10</x> |
|
36 |
<y>10</y> |
|
37 |
<width>781</width> |
|
38 |
<height>351</height> |
|
39 |
</rect> |
|
40 |
</property> |
|
41 |
<layout class="QGridLayout" name="gridLayout"> |
|
42 |
<item row="1" column="0"> |
|
43 |
<widget class="QWidget" name="widget_2" native="true"> |
|
44 |
<widget class="QWidget" name="verticalLayoutWidget"> |
|
45 |
<property name="geometry"> |
|
46 |
<rect> |
|
47 |
<x>10</x> |
|
48 |
<y>10</y> |
|
49 |
<width>761</width> |
|
50 |
<height>151</height> |
|
51 |
</rect> |
|
52 |
</property> |
|
53 |
<layout class="QVBoxLayout" name="detectResultVerticalLayout"> |
|
54 |
<item> |
|
55 |
<widget class="QLabel" name="detectResultLabel"> |
|
56 |
<property name="font"> |
|
57 |
<font> |
|
58 |
<weight>75</weight> |
|
59 |
<bold>true</bold> |
|
60 |
</font> |
|
61 |
</property> |
|
62 |
<property name="text"> |
|
63 |
<string>검출 결과</string> |
|
64 |
</property> |
|
65 |
</widget> |
|
66 |
</item> |
|
67 |
<item> |
|
68 |
<widget class="QTextEdit" name="detectResultTextEdit"/> |
|
16 |
<layout class="QGridLayout" name="gridLayout_3"> |
|
17 |
<item row="0" column="0"> |
|
18 |
<layout class="QGridLayout" name="gridLayout"> |
|
19 |
<item row="1" column="0"> |
|
20 |
<widget class="QWidget" name="widget_2" native="true"> |
|
21 |
<layout class="QGridLayout" name="gridLayout_5"> |
|
22 |
<item row="0" column="0"> |
|
23 |
<layout class="QVBoxLayout" name="detectResultVerticalLayout"> |
|
24 |
<item> |
|
25 |
<widget class="QLabel" name="detectResultLabel"> |
|
26 |
<property name="font"> |
|
27 |
<font> |
|
28 |
<weight>75</weight> |
|
29 |
<bold>true</bold> |
|
30 |
</font> |
|
31 |
</property> |
|
32 |
<property name="text"> |
|
33 |
<string>검출 결과</string> |
|
34 |
</property> |
|
35 |
</widget> |
|
36 |
</item> |
|
37 |
<item> |
|
38 |
<widget class="QTextEdit" name="detectResultTextEdit"/> |
|
39 |
</item> |
|
40 |
</layout> |
|
69 | 41 |
</item> |
70 | 42 |
</layout> |
71 | 43 |
</widget> |
72 |
</widget> |
|
73 |
</item> |
|
74 |
<item row="0" column="0"> |
|
75 |
<widget class="QWidget" name="widget" native="true"> |
|
76 |
<widget class="QWidget" name="verticalLayoutWidget_2"> |
|
77 |
<property name="geometry"> |
|
78 |
<rect> |
|
79 |
<x>0</x> |
|
80 |
<y>0</y> |
|
81 |
<width>781</width> |
|
82 |
<height>171</height> |
|
83 |
</rect> |
|
84 |
</property> |
|
85 |
<layout class="QVBoxLayout" name="tVerticalLayout"> |
|
86 |
<item> |
|
87 |
<widget class="QWidget" name="targetToolsWidget" native="true"> |
|
88 |
<widget class="QWidget" name="gridLayoutWidget_2"> |
|
89 |
<property name="geometry"> |
|
90 |
<rect> |
|
91 |
<x>10</x> |
|
92 |
<y>10</y> |
|
93 |
<width>761</width> |
|
94 |
<height>25</height> |
|
95 |
</rect> |
|
96 |
</property> |
|
97 |
<layout class="QGridLayout" name="gridLayout_2"> |
|
98 |
<item row="0" column="2"> |
|
99 |
<widget class="QPushButton" name="clockPushButton"> |
|
100 |
<property name="text"> |
|
101 |
<string>Clock</string> |
|
102 |
</property> |
|
103 |
</widget> |
|
104 |
</item> |
|
105 |
<item row="0" column="1"> |
|
106 |
<widget class="QPushButton" name="counterClockPushButton"> |
|
107 |
<property name="text"> |
|
108 |
<string>CounterClock</string> |
|
44 |
</item> |
|
45 |
<item row="0" column="0"> |
|
46 |
<widget class="QWidget" name="widget" native="true"> |
|
47 |
<layout class="QGridLayout" name="gridLayout_4"> |
|
48 |
<item row="0" column="0"> |
|
49 |
<layout class="QVBoxLayout" name="tVerticalLayout"> |
|
50 |
<item> |
|
51 |
<widget class="QWidget" name="targetToolsWidget" native="true"> |
|
52 |
<widget class="QWidget" name="gridLayoutWidget_2"> |
|
53 |
<property name="geometry"> |
|
54 |
<rect> |
|
55 |
<x>10</x> |
|
56 |
<y>10</y> |
|
57 |
<width>761</width> |
|
58 |
<height>25</height> |
|
59 |
</rect> |
|
60 |
</property> |
|
61 |
<layout class="QGridLayout" name="gridLayout_2"> |
|
62 |
<item row="0" column="2"> |
|
63 |
<widget class="QPushButton" name="clockPushButton"> |
|
64 |
<property name="text"> |
|
65 |
<string>Clock</string> |
|
66 |
</property> |
|
67 |
</widget> |
|
68 |
</item> |
|
69 |
<item row="0" column="1"> |
|
70 |
<widget class="QPushButton" name="counterClockPushButton"> |
|
71 |
<property name="text"> |
|
72 |
<string>CounterClock</string> |
|
73 |
</property> |
|
74 |
</widget> |
|
75 |
</item> |
|
76 |
<item row="0" column="3"> |
|
77 |
<widget class="QPushButton" name="redetectPushButton"> |
|
78 |
<property name="text"> |
|
79 |
<string>Re-Detect</string> |
|
80 |
</property> |
|
81 |
</widget> |
|
82 |
</item> |
|
83 |
<item row="0" column="0"> |
|
84 |
<widget class="QLabel" name="targetTextLabel"> |
|
85 |
<property name="font"> |
|
86 |
<font> |
|
87 |
<weight>75</weight> |
|
88 |
<bold>true</bold> |
|
89 |
</font> |
|
90 |
</property> |
|
91 |
<property name="text"> |
|
92 |
<string>검출 대상</string> |
|
93 |
</property> |
|
94 |
</widget> |
|
95 |
</item> |
|
96 |
</layout> |
|
97 |
</widget> |
|
98 |
<widget class="QWidget" name="widget_3" native="true"> |
|
99 |
<property name="geometry"> |
|
100 |
<rect> |
|
101 |
<x>10</x> |
|
102 |
<y>40</y> |
|
103 |
<width>761</width> |
|
104 |
<height>121</height> |
|
105 |
</rect> |
|
106 |
</property> |
|
107 |
<widget class="QWidget" name="verticalLayoutWidget_3"> |
|
108 |
<property name="geometry"> |
|
109 |
<rect> |
|
110 |
<x>0</x> |
|
111 |
<y>0</y> |
|
112 |
<width>761</width> |
|
113 |
<height>121</height> |
|
114 |
</rect> |
|
109 | 115 |
</property> |
116 |
<layout class="QVBoxLayout" name="targetVerticalLayout"/> |
|
110 | 117 |
</widget> |
111 |
</item> |
|
112 |
<item row="0" column="3"> |
|
113 |
<widget class="QPushButton" name="redetectPushButton"> |
|
114 |
<property name="text"> |
|
115 |
<string>Re-Detect</string> |
|
116 |
</property> |
|
117 |
</widget> |
|
118 |
</item> |
|
119 |
<item row="0" column="0"> |
|
120 |
<widget class="QLabel" name="targetTextLabel"> |
|
121 |
<property name="font"> |
|
122 |
<font> |
|
123 |
<weight>75</weight> |
|
124 |
<bold>true</bold> |
|
125 |
</font> |
|
126 |
</property> |
|
127 |
<property name="text"> |
|
128 |
<string>검출 대상</string> |
|
129 |
</property> |
|
130 |
</widget> |
|
131 |
</item> |
|
132 |
</layout> |
|
133 |
</widget> |
|
134 |
<widget class="QWidget" name="widget_3" native="true"> |
|
135 |
<property name="geometry"> |
|
136 |
<rect> |
|
137 |
<x>10</x> |
|
138 |
<y>40</y> |
|
139 |
<width>761</width> |
|
140 |
<height>121</height> |
|
141 |
</rect> |
|
142 |
</property> |
|
143 |
<widget class="QWidget" name="verticalLayoutWidget_3"> |
|
144 |
<property name="geometry"> |
|
145 |
<rect> |
|
146 |
<x>0</x> |
|
147 |
<y>0</y> |
|
148 |
<width>761</width> |
|
149 |
<height>121</height> |
|
150 |
</rect> |
|
151 |
</property> |
|
152 |
<layout class="QVBoxLayout" name="targetVerticalLayout"/> |
|
118 |
</widget> |
|
153 | 119 |
</widget> |
154 |
</widget>
|
|
155 |
</widget>
|
|
120 |
</item>
|
|
121 |
</layout>
|
|
156 | 122 |
</item> |
157 | 123 |
</layout> |
158 | 124 |
</widget> |
159 |
</widget> |
|
160 |
</item> |
|
161 |
</layout> |
|
162 |
</widget> |
|
125 |
</item> |
|
126 |
</layout> |
|
127 |
</item> |
|
128 |
<item row="1" column="0"> |
|
129 |
<widget class="QDialogButtonBox" name="ocrDialogButtonBox"> |
|
130 |
<property name="orientation"> |
|
131 |
<enum>Qt::Horizontal</enum> |
|
132 |
</property> |
|
133 |
<property name="standardButtons"> |
|
134 |
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set> |
|
135 |
</property> |
|
136 |
</widget> |
|
137 |
</item> |
|
138 |
</layout> |
|
163 | 139 |
</widget> |
164 | 140 |
<resources/> |
165 | 141 |
<connections> |
내보내기 Unified diff