Qt for Debian README
--------------------

1. Preface

This README is intended to give developers and users exact information
about how the qt-x11-free package provided by TrollTech AS has been packaged
for Debian in case you either want to faciliate it for development 
of applications and libraries or plugins using the Qt class library. With 
qt-x11-3.1.1, the Debian packages have been massively restructured to get 
the most out of theoriginal Qt package and spit the contents up into 
several packages so that they make the most sensefor several groups of 
users; developers, application users, translators of Qt-based 
applications and Debian packagers who are packaging applications developed 
with Qt.2. 

2. General Overview

As Qt is a huge package that contains a complete environment for 
developers, it needs to be split up into several packages that make it 
easier for everyone else to handle it and not to require 
unnecessary disk space for end-users. Additionally, Qt can be configured 
in several ways - and therefore also used in several ways. Qt development 
usually requires the environment variable QTDIR. As Debian is placing 
libraries and header files in a quite specific filesystem order, this 
usually breaks setting a single environment variable to meet the 
requirements of packages. Therefore, symlinks are used to set up the system 
to meet both, the Debian filesystem standard and the QTDIR variable. All of 
Qt (so the QTDIR path) is available in /usr/share/qt3. If you need to set 
QTDIR, do export QTDIR=/usr/share/qt3

As far as the common build configuration goes, we note explicitely that the 
Debian package of Qt will in very rare cases break the compilation (most 
likely the linking) of applications on Debian which use Qt, in particular 
utilizing styles in an incorrect way by deriving from one of the styles 
that ship with Qt. In case you are a Debian packager and encounter 
problems, contact Debian Qt/KDE Maintainers (debian-qt-kde@lists.debian.org).
We will tell you why things don't work and what you should communicate on 
with the programmers of your application that you are packaging. The build 
configuration generally is intended to provide a Qt version that is as 
small as possible in terms of the memory size it requires. Therefore, 
everything inside Qt that can be compiled as plugins has been compiled that 
way. This includes: 

- imageformats: jpeg and mng - codecs (for languages like arab, japanese 
  etc provided with Qt) 
- sql drivers for databases (MySQL, ODBC and PostgreSQL)

The only exception is the imageformat png which has been compiled built-in 
due to the fact that there is literally no program that uses no icons at 
all and icons are to be used preferrably in png format. The plugins are all 
located under /usr/lib/qt3/plugins. This is also the install location you
should choose as a package maintainer for 
qt-plugins so the user doesn't have to customize his library path for 
loading Qt plugins. The only exception is that KDE delivers a set of Qt 
plugins as well (mainly styles and designer plugins); those are placed in 
/usr/lib/trinity/plugins. 

QMotif Extension: As this code is only available in commercial environments 
(and produces a static library libqmotif.a anyway that those commercial 
applications have to be linked against in addition to Qt), we left out all 
header files of the libqt3-headers package that are belonging to this 
QMotif extension.

Oracle Database driver, Sybase & Microsoft SQL Server driver: Those drivers 
are only available in a commercial version of Qt due to license 
incompatibilities with the GPL. If you need to faciliate those drivers, 
please visit http://www.trolltech.com and have a read at 
http://doc.trolltech.com/3.0/sql-driver.html.
  
3. Packages (End-User) 

The Qt built has been split up into several packages that allow for easy 
installation for all types of users. The End-user usually only requires to 
have the following packages installed to run an application that links 
against Qt:

Threaded version:libqt3-mt (the library libqt-mt.so.* and libqui.so.* for 
loading designer-made user interfaces at runtime).

Optionally depending on the program's requirements:

libqt3-mt-odbc
libqt3-mt-mysql
libqt3-mt-psql 

In addition to the libraries, it may make sense to install the program 
qtconfig to customize the look and behaviorof Qt programs. If you have KDE 
installed, the KDE control center will take this task automatically in most 
cases. qtconfig is available in the package qt3-qtconfig.

Also, Qt programs can make use of the online-help tool that ships with Qt, 
the Qt Assistant. The Assistant can be installed with the package 
qt3-assistant.

Qt Configuration files
----------------------
Qt programs most often use QSettings to store their information in configuration
files. With Qt 3.2, the new option --sysconfdir has been introduced that allows
us to use /etc/qt3 as the system-wide location where qt-program specific global
configuration files can go. If you're a programmer that wants to get familiar with
that, please look at the examples, documentation and the code in designer or
assistant as well as qtconfig.

4. Packages (Package maintainers)

In addition to the library, a package maintainer will require an additional 
set of packages to compile a package that requires Qt. Depending on the 
version of the qt library, you will require a different set of packages; 
the most common option should be to make your application link against the 
multi-threaded version (-mt).Packages necessary for compiling Qt 
applications from source:

libqt3-mt-dev   (use libqt3-dev for linking against -lqt, this package only 
                contains the .so files and the header file for libqui.so)

libqt3-headers  (header files for libqt and libqt-mt)
 
qt3-dev-tools  (this package contains the tools uic and moc as well as 
qmake, required for building Qt applications) 

If, however, you encounter an older program not to compile with this set 
read the FAQ at the end of this document.

5. Packages (Developers)

In addition to the packages that packagers require, a developer usually 
will require the Qt API documentationas well as tools like the assistant, 
linguist or designer. However, you should be fine with installing the API 
documentation that you can browse with a webbrowser, optionally with the 
assistant. They are available in /usr/share/doc/qt3-doc/html.
For a regular development environment, install qt3-designer and qt3-doc.

For faciliating Qt's extended environment to write plugins for the Qt 
Designer or extend the Designer as well as utilizing the Qt Assistant by 
calling it from within your program, install qt3-apps-dev, which contains
the static libraries and header files required for this functionality.

For Embedded Developers, the program qvfb (Qt Virtual Frambuffer) and 
makeqpf (embedded fonts tool)have been packaged into 
qt3-dev-tools-embedded. For developers that work on migrating their program 
from any Qt version prior to Qt 3.x to the Qt 3.x platform you will find 
additional tools in the qt3-dev-tools-compat.

For using the QTranslator class and where to find the qm-file for qt as 
well as where to place your translations,see the next section.

If your program doesn't compile with those settings in case you have 
started your project with Qt 1.x or 2.x, please read the FAQ section at the 
end of this document.

5. Packages (Translators)

In order to translate a Qt program into any other language, the Qt 3 way to 
do this is to let the developer create a ts-file containing the strings 
that the program exposes on the user interface. The tools to create the 
ts-file and to create the final qm (Q-message binary) file, lupdate and 
lrelease, are included in qt3-dev-tools.The single translator that only 
gets provided the ts file and has to return a translated ts file, it 
is absolutely enough to install qt3-linguist; the package qt3-assistant can 
be installed to access the online-help for the Qt Linguist itself.
In case you're converting an application using Qt prior to Qt 3, you may 
want to uitilize the qt3-dev-tools-compat which include the necessary tools 
to convert older qm files to the new ts file standard.

Locations of message translations: 

Qt ships with a set of translations for the strings used inside Qt. Those 
translations will be installed into /usr/share/qt3/translations (qm files 
only), which equals $QTDIR/translations respectively 
qInstallPath() + QString( "/translations" ). 

The configure option --translationdir has been set to /usr/share/qt3/translations
accordingly since it was introduced in Qt 3.2. 

To correctly enable your program to display the translations to the Qt 
library and to load the translation of the program itself, we currently 
suggest to either install your translations along with any other data files 
into/usr/share/<appname>/, translation files into the subdirectory 
translations (that is /usr/share/<appname>/translations) The code that your 
application should use to load the Qt translation will have to look like 
the following:    

int main( int argc, char **argv )
    {
        QApplication app( argc, argv );

        // translation file for Qt
        QTranslator qt( 0 );
        qt.load( QString( "qt_" ) + QTextCodec::locale(), qInstallPath() + 
        QString( "/translations" );
        app.installTranslator( &qt );

        // translation file for application strings
        QTranslator myapp( 0 );
        myapp.load( QString( "myapp_" ) + QTextCodec::locale(), "." ); 
        // use a substitue for $prefix/share/appname/translations here      
        app.installTranslator( &myapp );

6. Frequently Asked Questions

Using Qt for Debian as a developer or packager 
----------------------------------------------

Q: I want to compile a source package that utilizes qmake to build the 
Makefiles. What do I need to do to makeit work ?

A: qmake requires two environment variables to be set, QTDIR and QMAKESPEC. 
To make it work, do
export QTDIR=/usr/share/qt3
export QMAKESPEC=linux-g++

Then run qmake -o Makefile <projectfile>.pro

After that, the Makefile is correctly created to build your application on 
Debian. As a packager, export thosetwo variables in the rules file before 
calling qmake.

Q: I have an application that when linking gives me symbol referencing 
errors to Q*Style. Why does my applicationnot link correctly ?

A: The author of the program is using the styles that ship with Qt directly 
instead of using the QStylePlugin interface.If you are the author of the 
program, change your program to use QStylePlugin. If you are a packager, 
write to theauthor of the program that he is assuming that the styles 
shipped with Qt are built-in to the library which is not the case on Debian 
and that he please should fix this and use QStylePlugin.

Q: Where are all the examples and tutorials ? And how do I build them ?

A: Qt ships with examples and tutorials; so does the Linguist and Designer. 
The tutorials and examples are compressed tarballs which you can unpack with 
tar -zxvf into your home directory. Change into the qt3-examples directory
and run the provided ./build-examples script. All Qt examples and tutorials,
including those for designer and the linguist, will be compiled. You will
notice however, that those examples that inherit from style classes which
are not built-in into Qt but configured as a plugin will not compile due
to the fact that they can't link to the Qt library. 

Q: I'm writing a pure Qt application and I want to ship it with a default 
configuration file. Where does that global configuration file go if I make 
use of the QSettings class ? 

A: With qt-3.2.0, Trolltech has introduced a configure option to Qt called
--sysconfdir which we intentionally set to /etc/qt3 similar to /etc/trinity for
KDE programs. Install your application's system wide configuration file
to /etc/qt3. 

Q: I'm compiling a program and I have a compile error due to a missing 
include. Why isn't that include not present in the Debian packages anymore 
? It compiled with older versions of Debian packages of Qt !

A: This may be due to two reasons: either the package still uses the old 
includes from Qt 1.x or 2.x that got basically renamed by Trolltech due to 
the naming convention. The filenames are now all following the scheme 

ClassName -> classname.h. 

Therefore, if you are the developer of the affected program, change your 
sources according to this scheme. Qt ships with two tools, qt20fix and 
qtrename140, to help developers migrate their API to the Qt 3 version, 
which can help you in the transition upgrade to Qt 3.

If you are affected by this as a packager, notify upstream to fix those 
problems and in the meanwhile use libqt3-compat-headers as a build 
dependency which includes the compatibility headers that just include the 
right files from the new API again.

Q: I have a question not covered by this FAQ and README file. Who should I 
turn to ?

A: Please turn to Debian Qt/KDE Maintainers (debian-qt-kde@lists.debian.org) 
for any questions regarding Qt on Debian.

 -- Ralf Nolden <nolden@kde.org>  Sun, 26 Jan 2003 20:39:19 +0100
 -- Ralf Nolden <nolden@kde.org>  Mon,  1 Sep 2003 19:24:16 +0200
 -- Modestas Vainius <modestas@vainius.eu> Fri, 22 Feb 2008 01:40:06 +0200
