################################################################ # This is a perl Qt4 binding world! # A warm welcome from China :-) ################################################################ PROGRESS 1. Qt Core module ported. 2. Qt Gui module ported. 3. Qt DBus module ported. 4. Qt Designer module skipped. 5. Qt Network module ported. 6. Qt OpenGL module ported. 7. Qt Script module ported. 8. Qt ScriptTools skipped. 9. Qt Sql module ported. 10.Qt Svg module ported. 11.Qt Test module ported (partially). 12.Qt UiTools skipped. 13.Qt WebKit ported. 14.Qt Xml module ported. 15.Qt XmlPatterns module ported. TODO see file TODO. BACKGROUND 14 years ago Ashley Winters made the 1st PerlQt binding for Qt, the fantastic ghraphic library. Time passed by, Qt became more popular and has been introduced to many other dynamic languages such as python, perl is now a bit behind. For a while I wanted to bring the latest Qt 4 back to perl. But this is not an easy job as you may know. I started this project since 2007, when I wrote QTEDI first, which is a LR parser to extract interface information from cpp header, based on Parse::RecDescent. However, due to the environment and some personal reasons, the entire project was paused during 2008 and 2009. I have been able to re-pick it up in 2010 and made some progress. From Spring 2011, further progress has been made. TECH NOTE The final XS and PM code is automated, from the following primary steps: 1. strip include remove include pragma, to exclude external resource; 2. cpp preprocessing remove macro defines and branches; 3. parsing done by QTEDI, parse cpp header and extract interface information; 4. re-format re-format interface information made by QTEDI, to work around some edge case parser cannot cover; 5. category categorize meta/enum/function/signal/slot/typedef by class; 6. typemap, packagemap, enummap study type involved by each public function/signal/slot, generate a typemap, create a packagemap for class/module mapping, enummap is a collection of all declared enum type; 7. xs code automation generate xs code for each class from results of #5 and #6 above, create top Core.xs skeleton; 8. pm code automation generate pm code for each class from results of #5 and #6 above, create top lib/Qt/Core.pm skeleton; 9. manifest and packaging generate MANIFEST file and run 'gmake dist'; - Dongxu Ma 2011 London