31 января 2008

Баг QtScript. (продолжение)

LestorN@QT: Баг QtScript.

Это был не баг!!! Долго не расписывая приведу ответ Троллей.

Hi,
There is no standard way of subclassing a "native" class. A setup like this should work, though:

function ByteArraySub(n) {
var o = new ByteArray(n);
o.__proto__ = ByteArraySub.prototype;
return o;
}

ByteArraySub.prototype = new ByteArray();

ByteArraySub.prototype.foo = function() { return this.length; }

ba = new ByteArraySub(10);
print(ba.foo());


This approach can be used when "subclassing" any native class, e.g. the built in Array class too.

Kent

Ещё раз хочу сказать что Trolltech замечательная компания, и я очень надеюсь, что Nokia им только поможет!!!

28 января 2008

Баг QtScript.

Разбираюсь я тут с QtScript. В 4.4 появился замечательный класс QScriptClass. Он позволяет создавать весьма динамические JavaScript объекты. Вобщем как заработает полностью, так обязательно подробно напишу, а пока меня заторозил неприятный баг (надеюсь что не фича).

Вобщем класс создайтся и отлично работает, но если попытаться использовать такой класс в качестве прототипа, то проявляются 2 неприятных момента. Проиллюстрирую на примере немного модифицированного examples/script/customclass (что исключит влияние моих оч.умелых ручек)


function ByteArraySub(n) {
ByteArray.call(this, n);
}

ByteArraySub.prototype = new ByteArray();

ba = new ByteArraySub(4);

print(ba instanceof Object);
print(ba instanceof ByteArray); //!! тут мы увидим на экране false!!!
print(ba instanceof ByteArraySub);

print(ba.length);
ba[1] = 123;
print(ba[1]);
ba[7] = 224;
print(ba.length);
result = '';
for (var p in ba) {
if (result.length > 0)
result += ', ';
result += '(' + p + ',' + ba[p] + ')';
}
print(result);
ba.toBase64(); //!! А вот тут мы вообще падаем в корку.
print(b64.toLatin1String());
ba.valueOf();
ba.chop(2);
ba.length;


Баг тролям отправил, так что ждёмс подтверждения.

23 января 2008

QAbstractFileEngine и QDirModel.

Есть в QT замечательная штука под названием QAbstractFileEngine. В двух словах это заготовка для построения VFS в отдельно взятой программе. Вот цитата из документации:

A QAbstractFileEngine subclass can be created to do synchronous network I/O based file system operations, local file system operations, or to operate as a resource system to access file based resources.

Собственно все операции с файлами (open, read, write, etc) идут именно через потомка этого класса QFSFileEngine. Также этот механизм используется для доступа к ресурсам (да-да, тот самый QIcon(":/icons/icon.png")).

Таким образом создав 3 класса

class MyFileEngineHandler : public QAbstractFileEngineHandler
class MyFileEngine: public QAbstractFileEngine
class MyFileEngineIterator : public QAbstractFileEngineIterator

мы получаем собственноручно созданную VFS для наших нужд. В процессе экспериментов я создал VFS для отображения структуры базы данных.

sql:/localhost/dbname/table_name/columns.txt

Работает!

Теперь немного критики.
1) (не шибко критичное) Выбор реализации QAbstractFileEngine происходит чеерз цепочку QAbstractFileEngineHandler куда передаётся имя файла как QString. Вероятно было бы не плохо задействовать для этих целей QUrl.
2) QDirModel не поддерживает эту систему. Вернее обращение всегда происходит через QFSFileEngine. Таким образом без внедрения в QT решить проблему не получится.

10 января 2008

Новый год и все-все-все...

С прошедшими и наступающими так сказать!!!

Отдых в НГ это святое. Включал компьютер только для просмотра свеженащёлканых фоток. Так что поздравляю как бы поздновато. А теперь по порядку.

Снапшотов свежих нет, ну оно и понятно - НГ он и у шведов НГ. Зато разум освобождённый от информационного гула начал генерировать интересные идеи. К примеру теперь в рамках одной платформы можно внедрить в десктопное приложение вэб интерфейс! Ведь любой QObject можно добавить в WebKit и общаться уже с помощью JavaScript! Первые тесты показали, что при помощи jquery (на prototype забил) довольно легко редактировать табличку в БД непосредственно из web странички! Попытаюсь создать специальный объект который вёл бы себя аналогично AjaX'у. Вторая идея это преобразовывать ui файлы в html/javascript код, пока не совсем до меня дошло применение этих идей, так что обращаюсь ко всем кого это заинтересовало высказываться в коментариях.

Пока писал с git появился новый срез. во все файлы внедрено упоминание о GPL Exception 1.1, на сайте троллей текста пока нет.

Ярлыки: , , ,