Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> perl Qt4 test /QtCore/ 
:(
    Опции темы
vadiml
Дата 5.11.2007, 14:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 310
Регистрация: 27.7.2007

Репутация: 5
Всего: 7



сейчас пишется perl Qt4, заработал первый модуль QtCore, после добавления QtGui и тестирования будет выложено на CPAN.
При написании приследовались цели:
- сделать максимально похожим на С++ Qt4, чтоб было легко пользоваться оригинальной документацией
- как можно более полно использовать возможности перла, например, вместо QVector, QList используются массивы перла
- транслятор с C++ на Perl должен быть более-менее простым, чтоб его было легко сопровождать (за монстра, который используется в perl/Qt3 страшно браться smile , здесь только 1 парсер, который на основе заголовочных файлов создает XS файлы)

пока есть несколько общих вопросов к заинтересованным:

 * сейчас *.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 сейчас тоже, но её доставить можно освободив место от фильмов smile ).

остались не решенными вопросы, если кто может помочь:
- как из Перла считать 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
PM MAIL Jabber   Вверх
arto
Дата 5.11.2007, 16:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 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. никак. пишите враппер.

PM MAIL ICQ   Вверх
vadiml
Дата 5.11.2007, 18:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 310
Регистрация: 27.7.2007

Репутация: 5
Всего: 7



Цитата(arto @  5.11.2007,  16:51 Найти цитируемый пост)
1. как удобнее. для больших проектов удобнее заводить свой корень в стандартном каталоге.

вот как раз вопрос использовать общий lib/Qt или подробить по библиотекам (QtCore, QtGui, QtXml, ...)

Цитата(arto @  5.11.2007,  16:51 Найти цитируемый пост)
2. попробуйте посмотреть на "магические" переменные, возможно будет удобнее.

вообще-то не выжу смысла -- УЖЕ есть готовый класс QString, весь вопрос в том, что удобнее его оставить или скрыто подменять на обычную переменную, например QFile(QString) можно заменить на QFile($просто_имя_файла)

Цитата(arto @  5.11.2007,  16:51 Найти цитируемый пост)
3. perldoc overload

где можно, overload уже используется, я интересуюсь случаем, когда операторы перегрузить нельзя, например  =  и  []
 
Цитата(arto @  5.11.2007,  16:51 Найти цитируемый пост)
4. не понял вопроса. вам надо прочитать переменную окружения или найти каталог ш файловой системе?

именно узнать каталог-prefix, в переменной окружения его нет

Цитата(arto @  5.11.2007,  16:51 Найти цитируемый пост)
5

спасибо, оно

Цитата(arto @  5.11.2007,  16:51 Найти цитируемый пост)
6

ещё сам помучаю, это просто пока не реализовано

Цитата(arto @  5.11.2007,  16:51 Найти цитируемый пост)
7

в С++ для функций класса можно реализовать lvalue, но его напрямую оттранслировать на Perl нельзя, будет обычная функция, а хотелось бы полной имитации поведения

Цитата(arto @  5.11.2007,  16:51 Найти цитируемый пост)
8

в xs можно задать переменное количество переменных, используя ...
но для них же надо знать какой тип этой переменной. А если пытаться начать перебирать все типы используя switch() и SvIOKp(SV*) & Co, то получается монстр. Так может уже есть что-то готовое?
PM MAIL Jabber   Вверх
arto
Дата 5.11.2007, 19:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 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. а на какой именно предмет надо?
PM MAIL ICQ   Вверх
nitr
Дата 5.11.2007, 19:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

Репутация: 37
Всего: 84



1. Согласен с arto, свой lib/Qt
2. Поясните вопрос. Если Ёвсё завязано", для чего хотели "обычные переменные"?
3. Где-то и про них описание есть, встречу, дам линк, а так имена=синонимы.
4. По стандарту в README или в INSTALL указать какой должен быть вызов, вот пример, perl Makefile.PL -i/usr/local/include , а это реализовать вы сможете (раз взялись за столько непостой проект).
5, 6 smile
7. Прочти док-цию, указанную arto

Добавлено через 11 минут и 23 секунды
вы должны знать - ведь нет типа переменной =) в perl.

Это сообщение отредактировал(а) nitr - 5.11.2007, 20:05


--------------------
PM   Вверх
vadiml
Дата 5.11.2007, 21:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 310
Регистрация: 27.7.2007

Репутация: 5
Всего: 7



Цитата(arto @  5.11.2007,  19:57 Найти цитируемый пост)
1. как удобнее. я поделил-бы на Qt::QtCore etc.

Цитата(nitr @  5.11.2007,  19:58 Найти цитируемый пост)
1. Согласен с arto, свой lib/Qt

вот я и думаю, какой из этих двух вариантов smile

Цитата(arto @  5.11.2007,  19:57 Найти цитируемый пост)
7. perldoc perlsub | less -p "Lvalue subroutines"

для использования lvalue функция в перле должна имень return $переменная, а всё дело в том, что переменная находится в С++ классе в разделе private

Цитата(arto @  5.11.2007,  19:57 Найти цитируемый пост)
8. а на какой именно предмет надо? 

надо аналог sprintf, а точнее QString::sprintf()

Цитата(nitr @  5.11.2007,  19:58 Найти цитируемый пост)
вы должны знать - ведь нет типа переменной =) в perl.

это в perl нет, а в perl xs -- есть, т.е. я могу определить в каком контексте последний раз использовалась переменная SV -- IV, UV, NV, PV или это вообще AV или HV

Цитата(nitr @  5.11.2007,  19:58 Найти цитируемый пост)
perl Makefile.PL -i/usr/local/include

наверное на этом и остановлюсь
PM MAIL Jabber   Вверх
arto
Дата 5.11.2007, 21:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1495
Регистрация: 31.10.2004

Репутация: 38
Всего: 40



8. я как-то делал такое, контекстно-зависимую проверку типов, но уже не помню подробностей.
вроде не так сложно было.
PM MAIL ICQ   Вверх
nitr
Дата 5.11.2007, 22:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

Репутация: 37
Всего: 84



1. Я имел ввиду что для этого проекта Qt создать, как все крупные проекты, или односмысловые smile Я считаю, что и arto, и я говорили обо одном. Qt => [QtCore => [QtString, QtFile], QtGui => [] ] (надеюсь ясно разъяснил)


--------------------
PM   Вверх
vadiml
Дата 5.11.2007, 23:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 310
Регистрация: 27.7.2007

Репутация: 5
Всего: 7



если смотреть примеры Qt4, то там почти везде
#include <QDir>
#include <QFile>
изредка встречается <QtCore/QDir> или <QtCore/qdir.h>

наверное проще, когда не надо всё время помнить в состав чего входит конкретный класс.
Попробую всё поставить в lib/Qt и если конфликта между разными пакетами не будет, то так и оставлю, иначе будут lib/QtCore, lib/QtGui, lib/QtXml, ...

PM MAIL Jabber   Вверх
vadiml
Дата 28.11.2007, 21:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 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
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0847 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.