При написании приследовались цели:
- сделать максимально похожим на С++ Qt4, чтоб было легко пользоваться оригинальной документацией
- как можно более полно использовать возможности перла, например, вместо QVector, QList используются массивы перла
- транслятор с C++ на Perl должен быть более-менее простым, чтоб его было легко сопровождать (за монстра, который используется в perl/Qt3 страшно браться
пока есть несколько общих вопросов к заинтересованным:
* сейчас *.pm устанавливаются по каталогам в зависимости от библиотеки, т.е. все pm для QtCore -- в lib/QtCore, для QtGui -- в lib/QtGui, и т.д. и в скрипте модули вызываются как
use QtCore::QString;
use QtCore::QFile;
Стоит ли их так раскладывать или лучше что бы всё устанавливалось в каталог Qt или вообще не использовать каталог, т.е. устанавливать в lib.
* в Qt очень много завязано на QString. Стоит ли использовать его как он есть или по возможности заменить на строки перла, т.е. обычные переменные, а всю трансляцию производить в XS-файлах.
* в классах довольно часто используются operator= , operator[], operator~ и другие неперегружаемые/нестандартные для перла операторы.
Какие для них прописать функции, т.к. для них перегрузить нечего
всё писалось с использованием Qt4.2.3, но более новые версии должны работать, разве что не будет видно какого-либо нового файла.
для желающих посмотреть:
просто архив -- http://www.klv.lg.ua/~vadim/perlQt4/QtCore-4.000.tar.bz2
src.rpm для федоры & Co -- http://www.klv.lg.ua/~vadim/perlQt4/perl-Q...00-0.fc.src.rpm
в архиве лежат пара небольших примеров рабочего кода.
для установки нужны заголовочные файлы Qt4
перед установкой надо в Makefile.PL прописать в переменной $prefix расположение каталога include c заголовочными файлами Qt (сейчас там /usr), при самой установке на экран выводятся неотранслированные функции и typedef'ы -- на них можно не обращать внимания (они отложены на потом)
в планах -- обеспечить работу под windows (ActivePerl), мака у меня нет (хотя и win сейчас тоже, но её доставить можно освободив место от фильмов
остались не решенными вопросы, если кто может помочь:
- как из Перла считать prefix для автоматического определения расположения заголовочных файлов Qt4 (у меня QTINC=/usr/lib/qt-3.3/include)
- как в TYPEMAP прописать std::string и wchar_t
- как транслировать переменные, определенные например как typedef bool (*f_null)(const Private *);
- как использовать lvalue из С, например функцию int &fn(); которую можно использовать как Класс.fn()+5
- как использовать sprintf, который принимает список переменной длины или va_list
- как в перле использовать шаблонные классы, (это для меня самая большая проблема), поэтому установлен #define QT_NO_MEMBER_TEMPLATES