KDE Frameworks is a collection of libraries and software frameworks readily available to any Qt -based software stacks or applications on multiple operating systems . Featuring frequently needed functionality solutions like hardware integration, file format support, additional graphical control elements , plotting functions, and spell checking , the collection serves as the technological foundation for KDE Plasma and KDE Gear . It is distributed under the GNU Lesser General Public License (LGPL).
25-553: KDE Frameworks is based on Qt, which enables a more widespread use of QML , a simpler JavaScript -based declarative programming language, for the design of user interfaces. The graphics rendering engine used by QML allows for more fluid user interfaces across different devices. Since the split of the KDE Software Compilation into KDE Frameworks 5, KDE Plasma 5 and KDE Applications , each sub-project can pick its own development pace. KDE Frameworks are released on
50-448: A WYSIWYG editor are available in the free cross-platform IDE Qt Creator since version 2.1 and many other IDEs. The qml executable can be used to run a QML file as a script. If the QML file begins with a shebang it can be made directly executable. However packaging an application for deployment (especially on mobile platforms) generally involves writing a simple C++ launcher and packaging
75-411: A mechanism to combine changes to properties in a semantic unit. A button for example has a pressed and a non-pressed state, an address book application could have a read-only and an edit state for contacts. Every element has an "implicit" base state. Every other state is described by listing the properties and values of those elements which differ from the base state. Example: In the default state, myRect
100-508: A monthly basis and use Git . It should be possible to install KDE Frameworks alongside the KDE Platform 4 so apps can use either one. Platform releases are those which begin a series (version number X.0). Only these major releases are allowed to break binary compatibility with the predecessor. Releases in the minor series (X.1, X.2, ...) will guarantee binary portability ( API & ABI ). This means, for instance, that software that
125-482: A property is assigned a JavaScript expression. The following QML uses two property bindings to connect the size of the rectangle to that of otherItem. QML extends a standards-compliant JavaScript engine, so any valid JavaScript expression can be used as a property binding. Bindings can access object properties, make function calls, and even use built-in JavaScript objects like Date and Math. Example: States are
150-610: A type which can then be instantiated in QML. QML provides direct access to the following concepts from Qt: Signal handlers are JavaScript callbacks which allow imperative actions to be taken in response to an event. For instance, the MouseArea element has signal handlers to handle mouse press, release and click: All signal handler names begin with "on". Because QML and JavaScript are very similar, almost all code editors supporting JavaScript will work. However full support for syntax highlighting , code completion, integrated help, and
175-525: Is a user interface markup language . It is a declarative language (similar to CSS and JSON ) for designing user interface–centric applications. Inline JavaScript code handles imperative aspects. It is associated with Qt Quick , the UI creation kit originally developed by Nokia within the Qt framework. Qt Quick is used for mobile applications where touch input, fluid animations and user experience are crucial. QML
200-497: Is a PropertyAnimation, which can animate all of the property types listed above. A property animation can be specified as a value source using the Animation on property syntax. This is especially useful for repeating animations. The following example creates a bouncing effect: Usage of QML does not require Qt/C++ knowledge to use, but it can be easily extended via Qt. Any C++ class derived from QObject can be easily registered as
225-472: Is a QML cache file format which stores a compiled version of QML dynamically for faster startup the next time it is run. Example: Objects are specified by their type, followed by a pair of braces. Object types always begin with a capital letter. In the example above, there are two objects, a Rectangle; and its child, an Image. Between the braces, one can specify information about the object, such as its properties. Properties are specified as property: value. In
250-774: Is also used with Qt3D to describe a 3D scene and a "frame graph" rendering methodology. A QML document describes a hierarchical object tree. QML modules shipped with Qt include primitive graphical building blocks (e.g., Rectangle, Image), modeling components (e.g., FolderListModel, XmlListModel), behavioral components (e.g., TapHandler, DragHandler, State, Transition, Animation), and more complex controls (e.g., Button, Slider, Drawer, Menu). These elements can be combined to build components ranging in complexity from simple buttons and sliders, to complete internet-enabled programs. QML elements can be augmented by standard JavaScript both inline and via included .js files. Elements can also be seamlessly integrated and extended by C++ components using
275-408: Is its modularization. In earlier KDE versions, the libraries were bundled as a single large package. In Frameworks, the libraries were split into individual smaller packages. This facilitates utilization of the libraries by other Qt-based software, since dependencies can be kept at a minimum. While KDE 4 was based on version 4 of the Qt widget toolkit, Frameworks 5 is based on version 5. As part of
SECTION 10
#1732790526272300-643: Is positioned at 0,0. In the "moved" state, it is positioned at 50,50. Clicking within the mouse area changes the state from the default state to the "moved" state, thus moving the rectangle. State changes can be animated using Transitions. For example, adding this code to the above Item element animates the transition to the "moved" state: Animations in QML are done by animating properties of objects. Properties of type real, int, color, rect, point, size, and vector3d can all be animated. QML supports three main forms of animation: basic property animation, transitions, and property behaviors. The simplest form of animation
325-559: Is used by various applications, for example Linus Torvalds and Dirk Hohndels' scuba diving application Subsurface, the messenger client Banji, the Kaidan messenger, Vvave music player and the KDE software center Discover. Linux distribution use some package management system to package the software they distribute. Debian for example distributes KGlobalAccel under the package name libkf5globalaccel , while Fedora Linux distributes it under
350-456: The KDE project's 'MegaRelease 6', on February 28, 2024, KDE Frameworks 6 was released, upgrading it to a Qt 6 base. During KDE SC 4, the then so called KDE Platform consisted of all libraries and services needed for KDE Plasma and the applications. Starting with Qt 5, this platform was transformed into a set of modules that is now referred to as KDE Frameworks. These modules include: Solid , Nepomuk , Phonon , etc. and are licensed either under
375-677: The KPlotObject class. KPlotObject consists of a QList of QPointF's, each specifying the X,Y coordinates of a data point. KPlotObject also specifies the "type" of data to be plotted (POINTS or CURVE or POLYGON or LABEL). The core of Kross provides the framework to deal transparently with interpreter-back-ends and offers abstract functionality to deal with scripts. Kirigami is a QML application framework developed by Marco Martin that enables developers to write applications that run natively on Android, iOS, Windows, Plasma Mobile and any classic Linux desktop environment without code adjustments. It
400-623: The LGPL, BSD license, MIT License or X11 license. Besides the KDE Software Compilation , there are other adopters such as the desktop environments LXQt , MoonLightDE or Hawaii. Version 3.0 of Krita , the raster graphics editor of the Calligra Suite , which was released on May 31, 2016, depends on KDE Frameworks 5 and Qt 5.2. With Kirigami, there is also increased usage by applications such as Amarok , Avogadro , Trojitá or Subsurface . QML QML ( Qt Modeling Language )
425-579: The Qt framework. QML is the language; its JavaScript runtime is the custom V4 engine, since Qt 5.2; and Qt Quick is the 2D scene graph and the UI framework based on it. These are all part of the Qt Declarative module, while the technology is no longer called Qt Declarative. QML and JavaScript code can be compiled into native C++ binaries with the Qt Quick Compiler. Alternatively there
450-563: The example above, we can see the Image has a property named source, which has been assigned the value pics/logo.png . The property and its value are separated by a colon. The id property Each object can be given a special unique property called an id. Assigning an id enables the object to be referred to by other objects and scripts. The first Rectangle element below has an id, myRect . The second Rectangle element defines its own width by referring to myRect.width , which means it will have
475-508: The maintainer of the framework, the type, the supported operating system and other information. The currently supported platforms are Linux, Microsoft Windows, macOS and Android. The Frameworks have a clear dependency structure, divided into "categories" and "tiers". The "categories" refer to runtime dependencies: The KDE Frameworks bundle consists of over 70 packages. These existed as a single large package, called kdelibs, in KDE SC 4 . Kdelibs
500-529: The name kf5-kglobalaccel . While being mainly written in C++, there are many bindings for other programming languages available: These and other bindings use the following technologies: Many bindings weren't updated to Qt5 and KF5 or only later in the release cycle. The 5.0 release was preceded by a technology preview, two alpha releases, and three beta releases. The source code of KDE Frameworks has been around since KDElibs 1. The first release as KDE Frameworks
525-435: The natural units of the data being plotted. KPlotWidget automatically converts everything to screen pixel units. KPlotWidget draws X and Y axes with tick marks and tick labels. It automatically determines how many tick marks to use and where they should be, based on the data limits specified for the plot. You change the limits by calling `setLimits(double x1, double x2, double y1, double y2)`. Data to be plotted are stored using
SECTION 20
#1732790526272550-474: The same width value as the first Rectangle element. Note that an id must begin with a lower-case letter or an underscore, and cannot contain characters other than letters, digits and underscores. A property binding specifies the value of a property in a declarative way. The property value is automatically updated if the other properties or data values change, following the reactive programming paradigm. Property bindings are created implicitly in QML whenever
575-500: Was developed for KDE 3.0 will work on all (future) KDE 3 releases; however, an application developed for KDE 2 is not guaranteed to be able to make use of the KDE ;3 libraries. KDE major version numbers mainly follow the Qt release cycle, meaning that KDE SC 4 is based on Qt 4, while KDE 3 was based on Qt 3. The repository of each framework should contain a file named metainfo.yaml . This file documents
600-622: Was split into several individual frameworks, some of which are no longer part of KDE but were integrated into Qt 5.2. KDE Frameworks are grouped in four different tiers according to dependency on other libraries. The following image formats have read and write support: Attica is a Qt library that implements the Open Collaboration Services API version 1.6. It grants easy access to the services such as querying information about persons and contents. Further documentation: to specify information in "data units"; i.e.,
625-612: Was with version 5, to account for the fact that the code base was that of KDE Platform version 4 (the only major version of KDE Platform ). The transition from KDE Platform to KDE Frameworks began in August 2013, guided by top KDE technical contributors. After the initial release of KDE Frameworks 5.0, the developers focused on adding new features to the components in KDE Frameworks 5, an example being better integration of Firefox into KDE. The major improvement of Frameworks 5
#271728