Going on the web with Qt

So I have been working underground for a while on a web framework based on Qt but its gotten out of control and I need more help on it. The initial goal was to write a creole 1.0 compliant wiki based on Qt, but soon it grew into a full framework because of the lack of good C++ tools to do web development.

So far I have the following features working:
1) Simple .UI to XHTML transformations.
2) Basic form widget support ( line edits, selection boxes, buttons etc).
3) Rudimentary DOM event to Qt slots working.
4) Full bidirectional mapping of QVariantMaps to JSON objects.
5) Creole 1.0 wiki parser that generates XHTML complaint XML
6) All XHTML generated by the HTMLWidgets is XHTML strict valid.
7) Works under IE 6-7, Firefox 2-3, and most webkit based browsers.

What is not working that I need help on:
1) A better layout engine to handle transformations from the UI files better. There is an example at http://geiseri.no-ip.org:8080/cgi-bin/creole.cgi that shows im close but no cigar when it comes to layouts.
2) More composite widgets to better convert Qt widgets like a date picker and a tab widget.
3) More flexability in the Javascript to Qt signals.
4) Examples
5) And testing.

I have some demos of what I have so far on a home server so be gentle. http://geiseri.my-ip.org/cgi-bin/helloworld.cgi is a simple text edit that updates the UI via a Qt slot. http://geiseri.my-ip.org/cgi-bin/selections.cgi is an example of dynamically populating a selection box control via a Qt slot as well as form submission.

So if anyone is interested please sign up.

Also yes, I know about Wt, but I found out about it after I started the project and decided to keep going.


I guess I'd best mention Nanogear (http://code.google.com/p/nanogear/) (http://blog.binaryhelix.net/2008/08/kexi-and-web-forms-future.html). Nanogear is currently very young, but you might consider working with the developers (mainly me and Mr. Villani). We could do more REST plumbing work, and you could focus more on the web/Qt bridge you already started. Albeit, you couldn't integrate the technology into Nanogear proper (only STD and Boost dependencies allowed), but you could always make use of Ng for things you don't want to reinvent.

By theriddle at Mon, 10/06/2008 - 00:04

I am looking for any help I can get on the front end logic. I have been looking at YUI because I will be damned if I will write YA Tab Widget for the web :) The end goal is that someone can write a form based application with Qt and take it to the web quickly with out having to learn all the ajax stuff needed to make a usable web application.

By Ian Reinhart Geiser at Mon, 10/06/2008 - 03:28

We're currently working on the REST API, and you are currently working on widget implementation. Eventually we'll each have to do what the other is doing.

By theriddle at Mon, 10/06/2008 - 14:43

I've been looking at your software for awhile now and need to know: where in the QCGICore AppServer and AppController classes can my bridge code go? My idea has been that the web service developer would have Nanogear pass the request to the Qt code and retrieve a response to serve to the client.

What I'm asking is: Where does your system get input from the server? I can't find the CGI implementation code.

By theriddle at Sat, 11/15/2008 - 21:08

Wt is a nice C++ Qt-like development environment for Web apps, although it doesn't use Qt.

It should be possible to adapt it to use Qt code for signals/slots instead of boost::signal and QVariants instead of boost::any and so on. When someone asked why Wt didn't use Qt in the talk at this years Akademy, the developer Koen Deforche said that it was for licensing reasons rather than technical reasons. As Wt is dual licensed like Qt, and it would have been too expensive to require every commercial developer to buy a Qt license.

By Richard Dale at Mon, 10/06/2008 - 11:14

I'd be very interested to check out what you have done so far but geiseri.my-ip.org is unavailable from where I am.

Is your code squarely based on the Qt networking stack?

Wt is mature but it requires boost and asio as dependencies whereas I am particularly interested in a Qt-only web library.

By Mark Constable at Tue, 10/07/2008 - 05:40

I have subversion up at: http://svn.geiseri.com/svn/projects/creole/ The examples are found in the demos directory.

Its purely Qt based, and only uses QMake to build.

By Ian Reinhart Geiser at Tue, 10/07/2008 - 15:57