sersModel);> show ();
Клас QSqlQuery забезпечує інтерфейс для виконання SQL запитів і навігації по результуючої вибіркою.
Для виконання SQL запитів, просто створюють об'єкт QSqlQuery і викликають QSqlQuery :: exec (). Наприклад, ось так:
QSqlQuery query;. prepare («SELECT COUNT (*) FROM KeyCombinations»);. exec ();
Конструктор QSqlQuery приймає необов'язковий аргумент QSqlDatabase, який уточнює, яке з'єднання з базою даних використовується. Якщо його не вказати, то використовується з'єднання за замовчуванням. Якщо виникає помилка, exec () повертає false. Доступ до помилки можна отримати за допомогою QSqlQuery :: lastError ().
QSqlQuery надає одноразовий доступ до результуючої вибіркою одного запиту. Після виклику exec (), внутрішній покажчик QSqlQuery вказує на позицію перед першим записом. Якщо викликати метод QSqlQuery :: next () один раз, то він перемістить покажчик до першого запису. Після цього необхідно повторювати виклик next (), щоб отримувати доступ до інших записів, до тих пір поки він не поверне false. Ось типовий цикл, перебирающий всі записи по порядку:
while (query.next ())
{combination=query.value (0). toInt (); count=query.value (0). toInt (); () << combination << count;
}
QSqlQuery може виконувати не тільки SELECT, але також і будь-які інші запити. Наступний приклад вставляє запис в таблицю, використовуючи INSERT:
QSqlQuery query;
query.exec («INSERT INTO NeuralNetDetails (netId, layerNum, neuronCount) VALUES (1, 2, 3)»);
2.5.3 Багаторівнева робота програми
Оскільки навчання нейронної мережі - досить довгий процес, що вимагає істотних витрат процесорного часу, то щоб уникнути заморожування графічного інтерфейсу під час навчання нейронної мережі були застосовані можливості потоків Qt. Qt надає підтримку потоків у вигляді платформо-незалежних потокових класів, потокобезпечна способу відправки подій і можливості установки з'єднань сигнал-слот між потоками. Це полегшує створення переносимих багатопоточних додатків і використання переваг багатопроцесорних машин.
Примірник QThread являє собою потік і надає кошти для запуску потоку функцією start (), яка виконуватиме перевизначення QThread :: run (). Реалізація run () для потоку - така ж точка входу, що і функція main () для програми. Весь код виконується в стеку викликів, який починається у функції run (), яка виконує новий потік, а закінчується при завершенні потоку, коли відбувається повернення з функції. QThread випускає сигнали, що повідомляють про початок або закінчення виконання потоку.
Для створення потоку створюється підклас QThread і перевизначається його функція run ().
class NeuralNetTeachThread: public QThread
{_OBJECT: setNet (NeuralNetBP * value)
{= value;
}: * net; run ()
{> TeachOffLine (); epochCount; res=net-> GetTeachStatus (epochCount); (netTeached (res == 0));
}: netTeached (bool);
};
...