Qt

Баг метода isOpen() в QSqlDatabase

Наткнулся я на один не приятный баг в Qt 5.4. Выяснил вот, что в классе QSqlDatabase метод isOpen(), отвечающий за проверку соединения с базой данных, НЕ РАБОТАЕТ. Он всегда возвращает true, даже если соединение с базой оборвалось. Метод гугления показал, что я не единственный кто напоролся на этот баг. И главное, народ о нём уже репортил разработчикам в более ранних релизах Qt (если память не изменяет в 4.8), но баг всё ещё присутствует. =/

Выход из ситуации следующий: используйте API той БД с которой работаете. Ниже пример того, как я это сделал через MySQL API (Си’шный).

#include "mysql.h"

// функция для замены метода isOpen()
bool SQLmanager::haveConnection() {

	QVariant handle = db.driver()->handle();

	if ((QString)handle.typeName() == (QString)"MYSQL*") {
		MYSQL *nativeHandle = *static_cast<MYSQL **>(handle.data());
		if (nativeHandle != 0) { // если удалось получить указатель
			if (mysql_ping(nativeHandle) == 0) // mysql_ping возвращает 0, если соединение есть, иначе возвращает код ошибки
				return true;
			else
 				return false;
 		}/* else {
 			qDebug() << "не удалось получить указатель MYSQL*";
 		}*/
	}
	return false;
}

 

Генерация лабиринта и его прохождение

В предыдущей статье я описал метод генерации лабиринтов из связанных комнат разных размеров. На этот раз мы  разберём другой способ генерации лабиринтов, в котором лабиринты будут получаться классической формы. Кроме того, я расскажу о том, как находить самый короткий путь между любыми двумя точками лабиринта.

(далее…)

Подключение SFML в Qt Creator

Создаём пустой проект и в проектном файле (.pro) добавляем следующие строчки:

LIBS += -LC:/SFML/lib

CONFIG(release, debug|release): LIBS += -lsfml-audio -lsfml-graphics -lsfml-main -lsfml-network -lsfml-window -lsfml-system
CONFIG(debug, debug|release): LIBS += -lsfml-audio-d -lsfml-graphics-d -lsfml-main-d -lsfml-network-d -lsfml-window-d -lsfml-system-d

INCLUDEPATH += C:/SFML/include
DEPENDPATH += C:/SFML/include

(далее…)