08 мая 2010

PostgeSQL записки #2 для QT Script

Еще один способ подписаться на RAISE [level] ... записки генерируемые на стороне PostgreSQL сервера. На этот раз я просто добавил динамическую загрузку libpq.

05 мая 2010

QSettings in Qt Script Environment

При использовании объекта типа QSettings в среде Qt Script существует одна проблема. Когда Вы устанавливаете какое-либо значение для какого-либо ключа, в объекте оно сохраняется в QVariant. После сохранения ключей и значений в файл или другое место они конвертируются/кодируются в значения типа QString. После загрузки значений из файла в объект, в объекте они хранятся в виде QString. А во время получения данных значений используя функцию QSettings::value они преобразовываются с помощью конвертирующих функций определенных в QVariant.

Говоря проще, при второй загрузке приложения, все ранее сохраненные настройки имеют тип QString.
Ну так вот сама проблема:
QVariant ковертирует строку "false" в bool false.
В среде Qt Script QSettings::value возвращает строку и данная строка если она не пустая конвертируется в true. Это значит, что в Qt Script данный код будет работать корректно только при первом запуске приложения:
var settings = new QSettings(this);
if (!settings.contains("key"))
  settings.setValue("key", false);
if (!settings.value("key"))
  print("key is false");
При последующих запусках приложения settings.value("key") будет возвращать строку "false" и Qt Script будет ее успешно конвертировать в Boolean(true).

Выход из создавшегося положения:
var key;
key = typeof(settings.value("key")) == "string" ? settings.value("key") == "true" : settings.value("key");

Postgres Notice Processing

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

03 мая 2010

Названия qt-сигналов

Не следует экспериментировать с перегрузкой сигналов/слотов, так как qt script bindings generator не разберется и не создаст нужных оболочек.