![]() |
Модераторы: korob2001, ginnie |
![]() ![]() ![]() |
|
vadiml |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 310 Регистрация: 27.7.2007 Репутация: 5 Всего: 7 |
сейчас пишется perl Qt4, заработал первый модуль QtCore, после добавления QtGui и тестирования будет выложено на CPAN.
При написании приследовались цели: - сделать максимально похожим на С++ 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 |
|||
|
||||
arto |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1495 Регистрация: 31.10.2004 Репутация: 38 Всего: 40 |
1. как удобнее. для больших проектов удобнее заводить свой корень в стандартном каталоге.
2. попробуйте посмотреть на "магические" переменные, возможно будет удобнее. 3. perldoc overload 4. не понял вопроса. вам надо прочитать переменную окружения или найти каталог ш файловой системе? 5. http://www.nntp.perl.org/group/perl.xs/2006/11/msg2328.html ? 6. не понял вопроса. 7. не понял вопроса. 8. не понял вопроса 9. никак. пишите враппер. |
|||
|
||||
vadiml |
|
||||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 310 Регистрация: 27.7.2007 Репутация: 5 Всего: 7 |
вот как раз вопрос использовать общий lib/Qt или подробить по библиотекам (QtCore, QtGui, QtXml, ...)
вообще-то не выжу смысла -- УЖЕ есть готовый класс QString, весь вопрос в том, что удобнее его оставить или скрыто подменять на обычную переменную, например QFile(QString) можно заменить на QFile($просто_имя_файла) где можно, overload уже используется, я интересуюсь случаем, когда операторы перегрузить нельзя, например = и []
именно узнать каталог-prefix, в переменной окружения его нет спасибо, оно ещё сам помучаю, это просто пока не реализовано в С++ для функций класса можно реализовать lvalue, но его напрямую оттранслировать на Perl нельзя, будет обычная функция, а хотелось бы полной имитации поведения в xs можно задать переменное количество переменных, используя ... но для них же надо знать какой тип этой переменной. А если пытаться начать перебирать все типы используя switch() и SvIOKp(SV*) & Co, то получается монстр. Так может уже есть что-то готовое? |
||||||
|
|||||||
arto |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1495 Регистрация: 31.10.2004 Репутация: 38 Всего: 40 |
1. как удобнее. я поделил-бы на Qt::QtCore etc.
2. можно и так. 3. делать враппер 4.1 File::Find 4.2 составить список каталогов и правила 7. perldoc perlsub | less -p "Lvalue subroutines" 8. а на какой именно предмет надо? |
|||
|
||||
nitr |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2543 Регистрация: 10.2.2006 Где: Россия :) Репутация: 37 Всего: 84 |
1. Согласен с arto, свой lib/Qt
2. Поясните вопрос. Если Ёвсё завязано", для чего хотели "обычные переменные"? 3. Где-то и про них описание есть, встречу, дам линк, а так имена=синонимы. 4. По стандарту в README или в INSTALL указать какой должен быть вызов, вот пример, perl Makefile.PL -i/usr/local/include , а это реализовать вы сможете (раз взялись за столько непостой проект). 5, 6 ![]() 7. Прочти док-цию, указанную arto Добавлено через 11 минут и 23 секунды вы должны знать - ведь нет типа переменной =) в perl. Это сообщение отредактировал(а) nitr - 5.11.2007, 20:05 |
|||
|
||||
vadiml |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 310 Регистрация: 27.7.2007 Репутация: 5 Всего: 7 |
вот я и думаю, какой из этих двух вариантов ![]() для использования lvalue функция в перле должна имень return $переменная, а всё дело в том, что переменная находится в С++ классе в разделе private надо аналог sprintf, а точнее QString::sprintf() это в perl нет, а в perl xs -- есть, т.е. я могу определить в каком контексте последний раз использовалась переменная SV -- IV, UV, NV, PV или это вообще AV или HV наверное на этом и остановлюсь |
|||
|
||||
arto |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1495 Регистрация: 31.10.2004 Репутация: 38 Всего: 40 |
8. я как-то делал такое, контекстно-зависимую проверку типов, но уже не помню подробностей.
вроде не так сложно было. |
|||
|
||||
nitr |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2543 Регистрация: 10.2.2006 Где: Россия :) Репутация: 37 Всего: 84 |
1. Я имел ввиду что для этого проекта Qt создать, как все крупные проекты, или односмысловые
![]() |
|||
|
||||
vadiml |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 310 Регистрация: 27.7.2007 Репутация: 5 Всего: 7 |
если смотреть примеры Qt4, то там почти везде
#include <QDir> #include <QFile> изредка встречается <QtCore/QDir> или <QtCore/qdir.h> наверное проще, когда не надо всё время помнить в состав чего входит конкретный класс. Попробую всё поставить в lib/Qt и если конфликта между разными пакетами не будет, то так и оставлю, иначе будут lib/QtCore, lib/QtGui, lib/QtXml, ... |
|||
|
||||
vadiml |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 310 Регистрация: 27.7.2007 Репутация: 5 Всего: 7 |
у меня perl Qt4 QtGui заработала,
(не работает только перегрузка/вызов С++ виртуальных функций) в архиве есть часть переписанного на перле Qt Tutorial Добавлено через 1 минуту и 27 секунд вот -- http://www.qt-apps.org/content/show.php/Pe...4?content=69748 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Perl" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |