Qtopia Core ArchitectureA Qtopia Core application requires a server application to be running, or to be the server application itself. Any Qtopia Core application can act as the server. When more than one application are running, the subsequent applications connect to the existing server application as clients. The server and client processes have different responsibilities: The server process manages pointer handling, character input, and screen output. In addition, the server controls the appearance of the screen cursor and the screen saver. The client process performs all application specific operations. The server application is represented by an instance of the QWSServer class, while the client applications are represented by instances of the QWSClient class. On each side, there are several classes performing the various operations. All system generated events, including keyboard and mouse events, are passed to the server application which then propagates the event to the appropiate client. When rendering, the default behavior is for each client to render its widgets into memory while the server is responsible for putting the contents of the memory onto the screen. But when the hardware is known and well defined, as is often the case with software for embedded devices, it may be useful for the clients to manipulate and control the underlying hardware directly. Qtopia Core provides two different approaches to achieve this behavior, see the graphics rendering section below for details.
Client/Server CommunicationThe running applications continuously alter the appearance of the screen by adding and removing widgets. The server maintains information about each top-level window in a corresponding QWSWindow object. Whenever the server receives an event, it queries its stack of top-level windows to find the window containing the event's position. Each window can identify the client application that created it, and returns its ID to the server upon request. Finally, the server forwards the event, encapsulated by an instance of the QWSEvent class, to the appropiate client. If an input method is installed, it is used as a filter between the server and the client application. Derive from the QWSInputMethod class to implement custom input methods, and use the server's setCurrentInputMethod() function to install it. In addition, it is possible to implement global, low-level filters on key events using the QWSServer::KeyboardFilter class; this can be used to implement things like advanced power management suspended from a button without having to filter for it in all applications.
The clients (and the server) communicate with each other using the QCopChannel class. QCOP is a many-to-many communication protocol for transferring messages on various channels. A channel is identified by a name, and anyone who wants to can listen to it. The QCOP protocol allows clients to communicate both within the same address space and between different processes. Pointer Handling LayerThe mouse driver (represented by an instance of the QWSMouseHandler class) is loaded by the server application when it starts running, using Qt's plugin system. A mouse driver receives mouse events from the device and encapsulates each event with an instance of the QWSEvent class which it then passes to the server. Qtopia Core provides ready-made drivers for several mouse protocols, see the pointer handling documentation for details. Custom mouse drivers can be implemented by subclassing the QWSMouseHandler class and creating a mouse driver plugin. Qtopia Core's implementation of the QMouseDriverFactory class will automatically detect the plugin, loading the driver into the server application at runtime. In addition to the generic mouse handler, Qtopia Core provides a calibrated mouse handler. Use the QWSCalibratedMouseHandler class as the base class when the system device does not have a fixed mapping between device and screen coordinates and/or produces noisy events, e.g. a touchscreen. See also: Qtopia Core Pointer Handling and How to Create Qt Plugins. Character Input LayerThe keyboard driver (represented by an instance of the QWSKeyboardHandler class) is loaded by the server application when it starts running, using Qt's plugin system. A keyboard driver receives keyboard events from the device and encapsulates each event with an instance of the QWSEvent class which it then passes to the server. Qtopia Core provides ready-made drivers for several keyboard protocols, see the character input documentation for details. Custom keyboard drivers can be implemented by subclassing the QWSKeyboardHandler class and creating a keyboard driver plugin. Qtopia Core's implementation of the QKbdDriverFactory class will automatically detect the plugin, loading the driver into the server application at runtime. See also: Qtopia Core Character Input and How to Create Qt Plugins. Graphics RenderingQtopia Core's default behavior is for each client to render its widgets as well as its decorations into memory, while the server copies the memory content to the device's framebuffer. Whenever a client receives an event that alters any of its widgets, the application updates the relevant parts of its memory buffer: The decoration is loaded by the client application when it starts running (using Qt's plugin system), and can be customized by deriving from the QDecoration class and creating a decoration plugin. Qtopia Core's implementation of the QDecorationFactory class will automatically detect the plugin, loading the decoration into the application at runtime. Call the QApplication::qwsSetDecoration() function to actually apply the given decoration to an application.
Drawing on ScreenWhen a screen update is required, the server runs through all the top-level windows that intersect with the region that is about to be updated, and ensures that the associated clients have updated their memory buffer. Then the server uses the screen driver (represented by an instance of the QScreen class) to copy the content of the memory to the screen. The screen driver is loaded by the server application when it starts running, using Qt's plugin system. Qtopia Core provides ready-made drivers for several screen protocols, see the display management documentation for details. Custom screen drivers can be implemented by subclassing the QScreen class and creating a screen driver plugin. Qtopia Core's implementation of the QScreenDriverFactory class will automatically detect the plugin, loading the driver into the server application at runtime. To locate the relevant parts of memory, the driver is provided with the list of top-level windows that intersect with the given region. Associated with each of the top-level windows there is an instance of the QWSWindowSurface class representing the drawing area of the window. The driver uses these objects to retrieve pointers to the various memory blocks. Finally, the screen driver composes the surface images before copying the updated region to the framebuffer.
See also: Qtopia Core Display Management and How to Create Qt Plugins. |
Publicité
Best OfActualités les plus luesSemaine
Mois
Année
Le blog Digia au hasardDéploiement d'applications Qt Commercial sur les tablettes Windows 8Le blog Digia est l'endroit privilégié pour la communication sur l'édition commerciale de Qt, où des réponses publiques sont apportées aux questions les plus posées au support. Lire l'article.
CommunautéRessources
Liens utilesContact
Qt dans le magazine |
Cette page est une traduction d'une page de la documentation de Qt, écrite par Nokia Corporation and/or its subsidiary(-ies). Les éventuels problèmes résultant d'une mauvaise traduction ne sont pas imputables à Nokia. | Qt 4.3 | |
Copyright © 2012 Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon, vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. Cette page est déposée à la SACD. | ||
Vous avez déniché une erreur ? Un bug ? Une redirection cassée ? Ou tout autre problème, quel qu'il soit ? Ou bien vous désirez participer à ce projet de traduction ? N'hésitez pas à nous contacter ou par MP ! |
Copyright © 2000-2012 - www.developpez.com