Редакция 165 | К новейшей редакции | Только различия | Не учитывать пробелы | Содержимое файла | Авторство | Последнее изменение | Открыть журнал | RSS
Редакция 165 | Редакция 167 | ||
---|---|---|---|
1 | 1 | ||
2 | 2 | /****************************************************************************
|
|
3 | 3 | **
|
|
4 | 4 | ** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
|
|
5 | 5 | ** All rights reserved.
|
|
6 | 6 | ** Contact: Nokia Corporation (qt-info@nokia.com)
|
|
7 | 7 | **
|
|
8 | 8 | ** This file is part of the examples of the Qt Toolkit.
|
|
9 | 9 | **
|
|
10 | 10 | ** $QT_BEGIN_LICENSE:LGPL$
|
|
11 | 11 | ** Commercial Usage
|
|
12 | 12 | ** Licensees holding valid Qt Commercial licenses may use this file in
|
|
13 | 13 | ** accordance with the Qt Commercial License Agreement provided with the
|
|
14 | 14 | ** Software or, alternatively, in accordance with the terms contained in
|
|
15 | 15 | ** a written agreement between you and Nokia.
|
|
16 | 16 | **
|
|
17 | 17 | ** GNU Lesser General Public License Usage
|
|
18 | 18 | ** Alternatively, this file may be used under the terms of the GNU Lesser
|
|
19 | 19 | ** General Public License version 2.1 as published by the Free Software
|
|
20 | 20 | ** Foundation and appearing in the file LICENSE.LGPL included in the
|
|
21 | 21 | ** packaging of this file. Please review the following information to
|
|
22 | 22 | ** ensure the GNU Lesser General Public License version 2.1 requirements
|
|
23 | 23 | ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
|
24 | 24 | **
|
|
25 | 25 | ** In addition, as a special exception, Nokia gives you certain additional
|
|
26 | 26 | ** rights. These rights are described in the Nokia Qt LGPL Exception
|
|
27 | 27 | ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
|
28 | 28 | **
|
|
29 | 29 | ** GNU General Public License Usage
|
|
30 | 30 | ** Alternatively, this file may be used under the terms of the GNU
|
|
31 | 31 | ** General Public License version 3.0 as published by the Free Software
|
|
32 | 32 | ** Foundation and appearing in the file LICENSE.GPL included in the
|
|
33 | 33 | ** packaging of this file. Please review the following information to
|
|
34 | 34 | ** ensure the GNU General Public License version 3.0 requirements will be
|
|
35 | 35 | ** met: http://www.gnu.org/copyleft/gpl.html.
|
|
36 | 36 | **
|
|
37 | 37 | ** If you have questions regarding the use of this file, please contact
|
|
38 | 38 | ** Nokia at qt-info@nokia.com.
|
|
39 | 39 | ** $QT_END_LICENSE$
|
|
40 | 40 | **
|
|
41 | 41 | ****************************************************************************/
|
|
42 | 42 | ||
43 | 43 | /*
|
|
44 | 44 | delegate.cpp
|
|
45 | 45 | ||
46 | 46 | A delegate that allows the user to change integer values from the model
|
|
47 | 47 | using a spin box widget.
|
|
48 | 48 | */
|
|
49 | 49 | ||
50 | 50 | #include <QtGui>
|
|
51 | 51 | ||
52 | 52 | #include "delegate.h"
|
|
53 | 53 | ||
54 | 54 | ||
55 | 55 | //! [0]
|
|
56 | 56 | SpinBoxDelegate::SpinBoxDelegate(QObject *parent) |
|
57 | 57 | : QItemDelegate(parent) |
|
58 | 58 | {
|
|
59 | 59 | // SpinBoxDelegate::getItems();
|
|
60 | 60 | }
|
|
61 | 61 | //! [0]
|
|
62 | 62 | ||
63 | 63 | //! [1]
|
|
64 | 64 | QWidget *SpinBoxDelegate::createEditor(QWidget *parent, |
|
65 | 65 | const QStyleOptionViewItem &/* option */, |
|
66 | 66 | const QModelIndex &/* index */) const |
|
67 | 67 | {
|
|
68 | 68 | QStringList ID_list;
|
|
69 | 69 | QStringList Name_list;
|
|
70 | 70 | ||
71 | 71 | // getItems();
|
|
72 | 72 | ||
73 | 73 | ||
74 | 74 | ||
75 | 75 | ||
76 | 76 | ||
77 | 77 | ID_list = items.keys(); |
|
78 | 78 | Name_list = items.values(); |
|
79 | 79 | ||
80 | 80 | QComboBox *editor = new QComboBox(parent); |
|
81 | 81 | ||
82 | 82 | /*
|
|
83 | 83 | editor->addItem("0");
|
|
84 | 84 | editor->addItem("1");
|
|
85 | 85 | editor->addItem("2");
|
|
86 | 86 | editor->addItem("3");
|
|
87 | 87 | editor->addItem("4");
|
|
88 | 88 | editor->addItem("5");
|
|
89 | 89 | editor->addItem("6");
|
|
90 | 90 | editor->addItem("7");
|
|
91 | 91 | editor->addItem("8");
|
|
92 | 92 | editor->addItem("9");
|
|
93 | 93 | */
|
|
94 | 94 | ||
95 | 95 | // editor->addItem("0");
|
|
96 | 96 | ||
97 | 97 | editor->addItems(Name_list); |
|
98 | 98 | return editor; |
|
99 | 99 | }
|
|
100 | 100 | //! [1]
|
|
101 | 101 | ||
102 | 102 | //! [2]
|
|
103 | 103 | void SpinBoxDelegate::setEditorData(QWidget *editor, |
|
104 | 104 | const QModelIndex &index) const |
|
105 | 105 | {
|
|
106 | 106 | QString value = index.model()->data(index, Qt::EditRole).toString(); |
|
107 | 107 | QComboBox *comboBox = static_cast<QComboBox*>(editor); |
|
108 | 108 | ||
109 | 109 | QStringList ID_list;
|
|
110 | 110 | QStringList Name_list;
|
|
111 | 111 | int curr_index; |
|
112 | 112 | ||
113 | 113 | ID_list = items.keys(); |
|
114 | 114 | Name_list = items.values(); |
|
115 | 115 | ||
116 | 116 | curr_index = ID_list.indexOf(value); |
|
117 | 117 | comboBox->setCurrentIndex(curr_index); |
|
118 | 118 | /****************************************************
|
|
119 | 119 | if (value == "0") comboBox->setCurrentIndex(0);
|
|
120 | 120 | if (value == "1") comboBox->setCurrentIndex(1);
|
|
121 | 121 | if (value == "2") comboBox->setCurrentIndex(2);
|
|
122 | 122 | if (value == "3") comboBox->setCurrentIndex(3);
|
|
123 | 123 | if (value == "4") comboBox->setCurrentIndex(4);
|
|
124 | 124 | if (value == "5") comboBox->setCurrentIndex(5);
|
|
125 | 125 | if (value == "6") comboBox->setCurrentIndex(6);
|
|
126 | 126 | if (value == "7") comboBox->setCurrentIndex(7);
|
|
127 | 127 | if (value == "8") comboBox->setCurrentIndex(8);
|
|
128 | 128 | if (value == "9") comboBox->setCurrentIndex(9);
|
|
129 | 129 | ******************************************************/
|
|
130 | 130 | comboBox->setEditable(true); |
|
131 | 131 | ||
132 | 132 | ||
133 | 133 | //comboBox->setItemText(0, value);
|
|
134 | 134 | ||
135 | 135 | }
|
|
136 | 136 | //! [2]
|
|
137 | 137 | ||
138 | 138 | //! [3]
|
|
139 | 139 | void SpinBoxDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, |
|
140 | 140 | const QModelIndex &index) const |
|
141 | 141 | {
|
|
142 | 142 | QStringList ID_list;
|
|
143 | 143 | QStringList Name_list;
|
|
144 | 144 | ||
145 | 145 | QComboBox *comboBox = static_cast<QComboBox*>(editor); |
|
146 | 146 | int currIndex; |
|
147 | 147 | currIndex = comboBox->currentIndex(); |
|
148 | 148 | // QString value = comboBox->itemText(currIndex);
|
|
149 | 149 | ||
150 | 150 | ID_list = items.keys(); |
|
151 | 151 | Name_list = items.values(); |
|
152 | 152 | ||
153 | 153 | QString value = ID_list.at(currIndex); |
|
154 | 154 | model->setData(index, value, Qt::EditRole); |
|
155 | 155 | ||
156 | 156 | ||
157 | 157 | }
|
|
158 | 158 | //! [3]
|
|
159 | 159 | ||
160 | 160 | //! [4]
|
|
161 | 161 | void SpinBoxDelegate::updateEditorGeometry(QWidget *editor, |
|
162 | 162 | const QStyleOptionViewItem &option, const QModelIndex &/* index */) const |
|
163 | 163 | {
|
|
164 | 164 | editor->setGeometry(option.rect); |
|
165 | 165 | }
|
|
166 | 166 | //! [4]
|
|
167 | 167 | ||
168 | 168 | void SpinBoxDelegate::getItems(){ |
|
169 | 169 | QMap <QString, QString> result_map; |
|
170 | 170 | QSqlQuery q;
|
|
171 | 171 | QString query_str;
|
|
172 | 172 | bool ok; |
|
173 | 173 | ||
174 | 174 | query_str = tr("select * from `ListOfClasses`"); |
|
175 | 175 | q.prepare(query_str); |
|
176 | 176 | ||
177 | 177 | ||
178 | 178 | ok = q.exec(); |
|
179 | 179 | ||
180 | 180 | ||
181 | 181 | ||
182 | 182 | ||
183 | 183 | if (!ok) { |
|
184 | 184 | /*
|
|
185 | 185 | QString error_str;
|
|
186 | 186 | error_str = tr("íå óäàëîñü ïîëó÷èòü ñïèñîê îáúåêòîâ èç òàáëèöû ");
|
|
187 | 187 | error_str.append(inctance);
|
|
188 | 188 | QMessageBox::critical( // Äèàëîã ñ ñîîáùåíèåì îá îøèáêå.
|
|
189 | 189 | this, // Ðîäèòåëüñêèé âèäæåò.
|
|
190 | 190 | QObject::tr("Database Error"), // Çàãîëîâîê.
|
|
191 | 191 | q.lastError().text()); // Òåêñò ñîîáùåíèÿ.
|
|
192 | 192 | // tr("íå óäàëîñü ïîëó÷èòü ñïèñîê îáúåêòîâ èç òàáëèöû ")); // Òåêñò ñîîáùåíèÿ.
|
|
193 | 193 | ||
194 | 194 | */
|
|
195 | 195 | items.clear(); |
|
196 | 196 | return; |
|
197 | 197 | }
|
|
198 | 198 | ||
199 | 199 | ||
200 | 200 | // field_inctance = q.record().indexOf(tr("TableWhithInstance"));
|
|
201 | 201 | items.clear(); |
|
202 | 202 | while(q.next()){ |
|
203 | 203 | ||
204 | 204 | QString ID;
|
|
205 | 205 | QString ClassName;
|
|
206 | 206 | ID = q.value(0).toString(); // îïðåäåëÿåì ID |
|
207 | 207 | ClassName = q.value(1).toString(); // îïðåäåëÿåì Name |
|
208 | 208 | items.insert(ID, ClassName); |
|
209 | 209 | }
|
|
210 | 210 | ||
211 | 211 | ||
212 | 212 | // return result_map;
|
|
213 | 213 | }
|
|
214 | 214 | ||
215 | 215 | ||
216 | 216 | ||
217 | 217 | ||
218 | 218 | ||
219 | 219 | ||
220 | 220 | ||
221 | 221 | ||
222 | 222 | ||
223 | 223 | ||
224 | 224 | ||
225 | 225 | ||
226 | 226 | ||
227 | 227 | ||
228 | 228 | ||
229 | 229 | ||
230 | 230 | ||
231 | 231 | MyDEDelegate::MyDEDelegate( |
|
232 | 232 | bool calpopup,
|
|
233 | 233 | QObject *parent) |
|
234 | 234 | : QItemDelegate(parent), |
|
235 | 235 | m_calpopup(calpopup) { |
|
236 | 236 | }
|
|
237 | 237 | ||
238 | 238 | QWidget *MyDEDelegate::createEditor( |
|
239 | 239 | QWidget *parent,
|
|
240 | 240 | const QStyleOptionViewItem& /* option */, |
|
241 | 241 | const QModelIndex& /* index */) const { |
|
242 | 242 | QDateEdit *editor = new QDateEdit(parent); |
|
243 | 243 | editor->setCalendarPopup(m_calpopup); |
|
244 | 244 | editor->installEventFilter(const_cast<MyDEDelegate*>(this)); |
|
245 | 245 | return editor; |
|
246 | 246 | }
|
|
247 | 247 | ||
248 | 248 | void MyDEDelegate::setEditorData( |
|
249 | 249 | QWidget *editor,
|
|
250 | 250 | const QModelIndex &index) const { |
|
251 | 251 | QDate value = index.model()->data( |
|
252 | 252 | index, Qt::EditRole).toDate(); |
|
253 | 253 | QDateEdit *de = static_cast<QDateEdit*>(editor); |
|
254 | 254 | de->setDate(value); |
|
255 | 255 | }
|
|
256 | 256 | ||
257 | 257 | void MyDEDelegate::setModelData( |
|
258 | 258 | QWidget *editor,
|
|
259 | 259 | QAbstractItemModel *model,
|
|
260 | 260 | const QModelIndex& index) const { |
|
261 | 261 | QDateEdit *de = static_cast<QDateEdit*>(editor); |
|
262 | 262 | de->interpretText(); |
|
263 | 263 | QDate value = de->date(); |
|
264 | 264 | model->setData(index, value); |
|
265 | 265 | }
|
|
266 | 266 | ||
267 | 267 | void MyDEDelegate::updateEditorGeometry( |
|
268 | 268 | QWidget *editor,
|
|
269 | 269 | const QStyleOptionViewItem &option, |
|
270 | 270 | const QModelIndex& /* index */) const { |
|
271 | 271 | editor->setGeometry(option.rect); |
|
272 | 272 | }
|
|
273 | 273 | ||
274 | 274 | ||
275 | 275 | ||
276 | 276 | CPictureDelegate::CPictureDelegate( QObject * parent ) : QItemDelegate(parent) |
|
277 | 277 | {
|
|
278 | 278 | }
|
|
279 | 279 | ||
280 | 280 | ||
281 | 281 | ||
282 | 282 | ||
283 | 283 | ||
284 | 284 | QWidget *CPictureDelegate::createEditor(QWidget *parent, |
|
285 | 285 | const QStyleOptionViewItem &/* option */, |
|
286 | 286 | const QModelIndex &/* index */) const |
|
287 | 287 | {
|
|
288 | 288 | ||
289 | 289 | IconForm *editor = new IconForm(parent); |
|
290 | 290 | return editor; |
|
291 | 291 | ||
292 | 292 | }
|
|
293 | 293 | ||
294 | 294 | ||
295 | 295 | ||
296 | 296 | ||
297 | 297 | void CPictureDelegate::setEditorData(QWidget *editor, |
|
298 | 298 | const QModelIndex &index) const |
|
299 | 299 | {
|
|
300 | 300 | ||
301 | 301 | ||
302 | 302 | const QAbstractItemModel * model = index.model(); |
|
303 | 303 | IconForm *icnFrm = static_cast<IconForm*>(editor); |
|
304 | 304 | QVariant currentImage = model->data(index,0); |
|
305 | 305 | QByteArray bytes = currentImage.toByteArray(); |
|
306 | 306 | if (currentImage.isValid()) { |
|
307 | 307 | m_pxPicture.loadFromData(bytes); |
|
308 | 308 | }
|
|
309 | 309 | else { |
|
310 | 310 | //QItemDelegate::paint(painter, option, index);
|
|
- | 311 | ||
- | 312 | ||
311 | 313 | return; |
|
312 | 314 | }
|
|
313 | 315 | icnFrm->setPixmap(m_pxPicture); |
|
314 | 316 | }
|
|
315 | 317 | ||
316 | 318 | ||
317 | 319 | ||
318 | 320 | ||
319 | 321 | void CPictureDelegate::setModelData( |
|
320 | 322 | QWidget *editor,
|
|
321 | 323 | QAbstractItemModel *model,
|
|
322 | 324 | const QModelIndex& index) const { |
|
323 | 325 | IconForm *icnFrm = static_cast<IconForm*>(editor); |
|
- | 326 | if (!(icnFrm->dataIsChanged())) return; |
|
- | 327 | ||
324 | 328 | m_pxPicture = icnFrm->pixmap(); |
|
- | 329 | QImage currentImage = m_pxPicture.toImage(); |
|
- | 330 | QByteArray bytes;
|
|
- | 331 | QBuffer buffer(&bytes); |
|
- | 332 | buffer.open(QIODevice::WriteOnly); |
|
- | 333 | currentImage.save(&buffer, "PNG"); |
|
- | 334 | ||
- | 335 | ||
- | 336 | ||
- | 337 | ||
- | 338 | model->setData(index, QVariant (bytes), Qt::EditRole); |
|
- | 339 | ||
- | 340 | // int widht = m_pxPicture.width();
|
|
- | 341 | // int heigh = m_pxPicture.height();
|
|
- | 342 | // tblView->setRowHeight(index.row(), heigh + 10);
|
|
- | 343 | // model->submitAll();
|
|
- | 344 | ||
- | 345 | ||
- | 346 | ||
- | 347 | ||
- | 348 | // model->setData(index, value);
|
|
- | 349 | }
|
|
- | 350 | ||
- | 351 | ||
- | 352 | ||
- | 353 | void CPictureDelegate::updateEditorGeometry( |
|
- | 354 | QWidget *editor,
|
|
- | 355 | const QStyleOptionViewItem &option, |
|
- | 356 | const QModelIndex& /* index */) const { |
|
- | 357 | ||
- | 358 | ||
- | 359 | // QRect r(option.rect.x() + option.rect.width()/2 - 7, option.rect.y() + option.rect.height()/2 - 7, 150, 100);
|
|
- | 360 | // editor->setGeometry(r);
|
|
- | 361 | ||
- | 362 | editor->setGeometry(option.rect); |
|
- | 363 | }
|
|
- | 364 | ||
- | 365 | ||
- | 366 | ||
- | 367 | ||
- | 368 | void CPictureDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const |
|
- | 369 | {
|
|
- | 370 | ||
- | 371 | ||
- | 372 | m_pxPicture.fill( QColor(Qt::white) ); |
|
- | 373 | ||
- | 374 | const QAbstractItemModel * model = index.model(); |
|
- | 375 | QString sFileName = model->data( index, Qt::DisplayRole ).toString(); |
|
- | 376 | ||
- | 377 | QVariant currentImage = model->data(index,0); |
|
- | 378 | ||
- | 379 | ||
- | 380 | QByteArray bytes = currentImage.toByteArray(); |
|
- | 381 | // QImage image;
|
|
- | 382 | // image.loadFromData(bytes);
|
|
- | 383 | ||
- | 384 | ||
- | 385 | if (currentImage.isValid()) { |
|
- | 386 | m_pxPicture.loadFromData(bytes); |
|
- | 387 | ||
- | 388 | }
|
|
- | 389 | else { |
|
- | 390 | //QItemDelegate::paint(painter, option, index);
|
|
- | 391 | return; |
|
- | 392 | }
|
|
- | 393 | ||
- | 394 | ||
- | 395 | ||
- | 396 | ||
- | 397 | ||
- | 398 | /*
|
|
- | 399 | ||
- | 400 | if ( !sFileName.isEmpty() )
|
|
- | 401 | m_pxPicture.load( sFileName );
|
|
- | 402 | else {
|
|
- | 403 | //QItemDelegate::paint(painter, option, index);
|
|
- | 404 | return;
|
|
- | 405 | }
|
|
- | 406 | */
|
|
- | 407 | ||
- | 408 | ||
- | 409 | QPalette::ColorGroup cg = (option.state & QStyle::State_Enabled) ? |
|
- | 410 | ((option.state & QStyle::State_Active) ? QPalette::Normal : QPalette::Inactive ) : |
|
- | 411 | QPalette::Disabled; |
|
- | 412 | ||
- | 413 | if (option.state & QStyle::State_Selected) |
|
- | 414 | ||
- | 415 | ||
- | 416 | painter->fillRect(option.rect, option.palette.color(cg, QPalette::Highlight)); |
|
- | 417 | ||
- | 418 | int nX = option.rect.x() + ( ( option.rect.width() - m_pxPicture.rect().width() ) / 2 ); |
|
- | 419 | int nY = option.rect.y() + ( ( option.rect.height() - m_pxPicture.rect().height() ) / 2 ); |
|
- | 420 | painter->drawPixmap( nX, nY, m_pxPicture ); |
|
- | 421 | ||
- | 422 | ||
- | 423 | // drawFocus(painter, option, option.rect.adjusted(0, 0, -1, -1)); // since we draw the grid ourselves
|
|
- | 424 | ||
- | 425 | /*
|
|
- | 426 | QPen pen = painter->pen();
|
|
- | 427 | painter->setPen(option.palette.color(QPalette::Mid));
|
|
- | 428 | painter->drawLine(option.rect.bottomLeft(), option.rect.bottomRight());
|
|
- | 429 | painter->drawLine(option.rect.topRight(), option.rect.bottomRight());
|
|
- | 430 | painter->setPen(pen);
|
|
- | 431 | */
|
|
- | 432 | }
|
|
- | 433 | ||
- | 434 | ||
- | 435 | void CPictureDelegate::setTableView(QTableView* table){ |
|
- | 436 | tblView = table; |
|
- | 437 | }
|
|
- | 438 |