Writing your own applications

Developing an application to add to your Qtopia is just like developing any other application with the Qt API. You have all the same classes and functionality.

Special design considerations with Qtopia

You can develop your application using Qt/X11 or Qt/Window and just recompile it for Qt/Embedded, but you should keep in mind a number of differences in the devices that are commonly running Qtopia:

Smaller display
Require no more than about 240x240 pixels. Use QTabBar to organize functionality into separate groups, or just reduce the functionality - you don't need to provide every possible feature on a palm-sized version of your application. Note that the default font in Qt/Embedded is smaller than that for Qt/X11 and Qt/Windows.

Worse Keyboard
Organize functionality to be less dependent on keyboard input and more dependent on mouse input. Try using a QComboBox where you might otherwise have used a QLineEdit and thus provide a "History" list of previously typed choices.

Different Mouse
Handheld devices commonly use a stylus, which means only one mouse button, and no mouseMoveEvent() if the "mouse button" is not "pressed". You can provide "right mouse-button" functionality with the "press and hold" convention (eg. the menu in Filebrowser, flags in Minesweep). Avoid "mouse over" type events.

As with any application development with Qt/Embedded, the Qt Virtual Framebuffer tool in $QTDIR/src/tools/qvfb is a very useful development aide, since you can control the display size and run with the exact fonts.

As with any development with Qt, the Qt Designer tool in $QTDIR/tools/designer helps you organize functionality visually so you can more easily create a small yet logical and functional GUI.

Qtopia is less file-oriented than a typical Unix workstation: the user probably doesn't want to worry about file and directories, just the names of the document they have written that are appropriate for the application they are running.

To support this more document-centric model, the Qtopia library classes provide a basic document selector and file manager. See the FileSelector and FileManager classes defined in library/fileselector.h and library/filemanager.h. These mechanism are very simplistic currently, and they'll develop as the system improves.

File structure for new applications in Qtopia

A new application (let's call it foo) can be incorporated into the directory structure of Qtopia with these easy steps:
  1. Install the latest version of tmake, being sure to set $TMAKEPATH tuch that $TMAKEPATH/tmake.conf exists.

  2. Create a new subdirectory qpe/foo.

  3. Write your source code in qpe/foo and write a tmake project file, qpe/foo/foo.pro, file that looks like the other qpr/*/*.pro files.
  4. Add your directory to qpe/Makefile and re-run the configure script. This will create a Makefile.in and a Makefile. The Makefile.in should be distributed with you package so that others don't need tmake to install Qtopia.

  5. Compile your application:
        cd qpe/foo

  6. Add a foo.desktop file somewhere in qpe/apps, such as qpe/apps/Applications/foo.desktop. This file supports a subset of the functionality of standard .desktop files found in KDE. For example:
        [Desktop Entry]
        Name=Foo Viewer
    Unrecognized fields are ignored, and if they are used in the future, it will be according to the standard interpretations.

  7. Create an icon for your application in pics/foo/icon.png

  8. Package up your application, including your pics/ and apps/ files...
        tar cfz foo.tar.gz qpe/pics/foo/* \
    	qpe/apps/Applications/foo.desktop qpe/foo
    and put the package on a web site for others to share!
  9. If you want to make it easy to build binary packages of your application on the SHARP SL5000 or the Compaq iPAQ, make a control file similar to the other */*.control files - running mkipks on your control file will package up a binary that can be installed on the handheld.

Adding applications to the single-application build

To add an application to the single-application build, follow the procedure above, but with the following extras:

Running Qtopia applications on your device

  1. Ensure that $QTDIR/lib/fonts/ contains fonts and the fontdir file.
  2. Ensure that $QPEDIR/pics/ contains the pictures for the applications.
  3. Set and export QWS_DISPLAY=Transformed:Rot270:0 if you're running on a device that requires screen rotation (eg. SL5000 or iPAQ).
  4. The recommended locations for installing are the components are QTDIR="/usr" and QPEDIR="/opt/Qtopia".