CopperSpice

CopperSpice is a set of individual libraries which can be used to develop cross platform software applications in C++. It is a totally open source project released under the LGPL V2.1 license and was initially derived from the Qt framework. Over the last several years CopperSpice has completely diverged, with a goal of providing a first class GUI library to unite the C++ community.

Our motivation for developing CopperSpice was to change the fundamental design and turn the existing framework into a set of libraries for C++ developers. We are accomplishing this by leveraging modern C++ functionality, new technology, and modern tooling. CopperSpice currently requires C++17 or newer.

You can use CopperSpice with any existing tool chain such as GCC, clang, or MSVC. A C++ program using the CopperSpice libraries can be developed using any editor such as VI, emacs, or Diamond and built using CMake from a shell command line. For an integrated environment Visual Studio or QtCreator can be used for development, building, testing, and deployment.

Quick Links

Philosophy / Mission Statement

Subscriptions (Support)

Conference Presentations

CopperSpice YouTube Channel

Journal / Blog

Style Guide

CopperSpice GitHub

DoxyPress GitHub

Libraries

CopperSpice consists of the following libraries which can be linked into any existing C++ application.


CsCore
Date/Time, Strings (UTF-8 & UTF-16), Containers (QVector, QList, QMap, QHash, QFlatMap, QStack ...)
File System, Locales, Time Zone, JSON, Muxtes, Pointers, Threads
CsGui
Dialogs, File Selectors, Fonts, Images, Layouts, Menus, Printing, Styles, Widgets (QCalendar, QCheckBox, QComboBox, QLineEdit, QPushButton, QTabWidget ...)
CsMultimedia
Audio, Camera, Video (recording and playback)
CsNetwork
TCP, HTTP, FTP, IPv6, DNS lookups, SSL, URL support
CsOpenGL
Rendering Context, Graphic Formats, Shader Compiler
CsScript
JavaScript engine which can be embedded in your application
CsSql
SQLite, PostgreSQL, MySQL ...
CsSvg
Render and Disply SVG files
CsVulkan
Vulkan Instance, Vulkan Surface, Vulkan Devices
CsWebKit
Web View, Web Page which can be embedded in your application
CsXml
DOM reading and writing XML files, XML Reader
CsXmlPatterns
Schema Validation, XQuery

  • Meta-Object Compiler (moc)
    • The Meta-Object Compiler is no longer required for generating reflection meta data in CopperSpice
    • Since moc is no longer required it was completely removed
    • All functionality originally provided by moc was replaced with compile time templates
    • CopperSpice automatically generates meta data for processing Signals/Slots and Introspection
    • A template class can now inherit from QObject with no restrictions on data types
    • Complex data types can be used as a signal or slot argument, for example this is valid in CopperSpice: QMap<QString, int>
    • Removal of moc simplifies the build process

  • Benefits of CopperSpice
    • Extensive use of modern C++ functionality
      • templates, variadic templates, lambdas
      • expression SFINAE
      • move semantics, rvalue references
      • constexpr, constexpr if
      • decltype, type traits, tuple, override
      • strongly typed enums
      • threading model
    • Redesigned all container classes
      • Composition is used to wrap the C++ standard library containers
        • QVector, QList, QStringList, QLinkedList, QSet, QStack, QQueue
        • QMap, QHash, QMultiMap, QMultiHash
      • Supports both the STL and Qt API
      • Implement QMultiHash and QMultiMap as separate classes from QHash and QMap
      • Reverse iterators
      • Removed copy on write semantics
      • Added QFlatMap
        • Ordered map which stores elements in contiguous memory as a sorted vector of pairs
        • Similar API to QMap

    • CopperSpice includes a majority of the Qt 5 classes
    • Improve CsNetwork, supports OpenSSL 1.0.x and 1.1.x
    • Support for TLS and SPDY added
    • Add support for SHA-2 and SHA-3
    • Reimplemented atomic support (QAtomicInt, QAtomicPointer) wrapping the C++ standard library functionality
    • Enhanced CopperSpice to use STL algorithms rather than hand rolled algorithms
    • Removed support for obsolete platforms
    • QLocale classes refactored to use UTF-8 string classes
    • Update codec classes using UTF-8 strings
    • High DPI support
    • Moved to Unicode 11, migrate to Harfbuzz 2.x for text shaping
    • Improved platform specific support
    • Redesign plugin system
    • QVariant system, full overhaul removing unions in favor of type safe C++ constructs

    • Integration of CsPointer
      • Improved implementation of Smart Pointer Classes
    • Integration of CsSignal
      • Improved thread aware Signal/Slot delivery
      • Increased efficiency while maintaining the full Signal/Slot API
      • Deadlocks in Signal/Slot processing have been eliminated
    • Integration of CsString
      • Change storage to properly represent Unicode strings
      • Added new QString8 (UTF-8) and QString16 (UTF-16) classes
      • QString is synonymous with QString8
      • Create QStringParser class for string formatting methods
      • Redesign QRegularExpression class using iterators internally to handle UTF-8 and UTF-16
      • Add QStringView class which provides a view of a QString
      • Remove all string surrogate checking since it is not required with UTF-8 or UTF-16 encoding

    • Building
      • All CopperSpice libraries are built using CMake
      • C++ applications which are linked with CopperSpice should also use CMake whenever possible
      • Other build systems can be configured to link CopperSpice with your C++ application

Original Libraries (BSD License)

The following are standalone C++ libraries which can be linked into any existing C++ application.


CsCrypto
Provides a common interface to call existing cryptography libraries. It is designed to detect common cryptographic errors at compile time by using C++ type checking with the intention of preventing security vulnerabilities.
CsLibGuarded
Encapsulates a mutex with the corresponding data. There are several different classes available to support multi-threading allowing developers to choose the most appropriate solution. This library is used in CsSignal and CopperSpice.
CsPaint
Provides a higher level API for 3D, 2D, and text rendering on the GPU using the Vulkan graphics API.
CsPointer
A collection of smart pointers which extend the C++ Standard Library. Full implemenation of an intrusive pointer class and a class to manage nodes in a parent/child relationship.
CsSignal
This library is used to provide thread aware Signal/Slot delivery and is used by CopperSpice.
CsString
Unicode aware string library. This library is used by CopperSpice to support UTF-8 (QString8) and UTF-16 (QString16).

Converting to CopperSpice

The process of converting to CopperSpice is straight forward and the team is available for assistance. The header files in your Qt application need to be converted one time and this can be done quickly using our PepperMill utility. The build files in your project should be converted to use CMake. For examples on writing your build files refer to our KitchenSink demo program, Diamond Editor application and our "CopperSpice Overview" Documentation.

Getting Started

The "CopperSpice Overview" documentation includes information about how to build CopperSpice from source, where to download prebuilt binary files, setting up a project using CopperSpice, and how to migrate from Qt to CopperSpice.  CS Overview Documentation

Contacting CopperSpice

  • Ask questions or request a feature on our GitHub repository  Github
  • Join a discussion on our forum  Forum
  • Email the co-founders: info [at] copperspice.com