CopperSpice Overview  1.5.2
About CopperSpice

CopperSpice is of a set of individual libraries used to develop cross platform software applications in C++. It is an entirely 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 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. CopperSpice currently requires C++14 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 or Autotools from a shell command line.

For an integrated environment Visual Studio or Qt Creator can be used for development, building, testing, and deployment.

Libraries

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


CsCore, CsGui, CsMultimedia, CsNetwork, CsOpenGL, CsPhonon, CsScript, CsSql, CsSvg, CsWebKit, CsXml, and CsXmlPatterns

There are three open source BSD licensed libraries which are used internally by CopperSpice. These stand alone libraries can be used when developing any C++ application, even if CopperSpice is not used. Documentation for these libraries can be found on our website.

  • CsSignal
  • CsString
  • libGuarded

System Requirements

To use the CopperSpice libraries you will need a C++14 compiler and a C++14 standard library.

Building CopperSpice

The CopperSpice libraries can be built using CMake or GNU Autotools. For information about building CopperSpice from source refer to the following page.

Building CopperSpice (Source)

Benefits of CopperSpice

Reflection / Meta Object Compiler

  • 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 Slot arguments, for example the following is valid in Copperspice: QMap<QString, int>
  • Removal of moc simplifies the build process

Extensive use of modern C++ functionality

  • templates, variadic templates, lambdas
  • expression SFINAE
  • threading model
  • move semantics, override
  • constexpr, decltype, type traits, tuple
  • strongly typed enums

Reimplemented all container classes

  • Composition is used to wrap the C++ standard library containers, iterators, and algorithms
    • 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

Key enhancements

  • CopperSpice includes a majority of the Qt 5 classes
  • Improved CsNetwork and support for OpenSSL 1.0.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
  • Removed support of obsolete platforms
  • Migrate CopperSpice to use the STL algorithms
  • QLocale classes refactored to use UTF-8 string classes
  • Update codec classes to use UTF-8 string 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

  • Improved storage to properly represent Unicode strings
  • Added new QString8 (UTF-8) and QString16 (UTF-16) classes
  • QString is synonymous with QString8
  • Moved various formatting methods to the new QStringParser class
  • Developed a new QRegularExpression class which uses iterators internally to handle UTF-8 and UTF-16
  • Created a new QStringView class which works correctly with the new QString classes
  • Remove string surrogate checking since it is not required with UTF-8 / UTF-16 encoding

BSD Libraries

  • Integration of CsSignal
    • Improved thread aware Signal/Slot delivery
    • Increased efficiency while maintaining the full Signal/Slot API
  • Integration of CsString
    • Improved storage of Unicode strings
    • Added QString8 (UTF-8) and QString16 (UTF-16)
    • Removed obsolete code which handled surrogate pairs inconsistently
    • Removed multiple internal partial string classes which leveraged raw pointers into the string class

Migrating to CopperSpice

PepperMill is a translation utility and is run one time on your Qt header files to migrate to CopperSpice. This utility will convert your application header files to standard C++ and change the syntax to work with CopperSpice.

We have made the process of converting to CopperSpice simple and straight forward. Simply convert your application header files one time using the PepperMill utility and then modify your Autotools or CMake build files.

For sample build files you can refer to the KitchenSink demo application or the build files used in the DoxyPress project.

For more information refer to PepperMill.

API Documentation

Full class documentation is available on the CopperSpice website or downloaded from our forum.

On line CopperSpice API Documentation

Download CopperSpice API Documentation

Presentations / YouTube

Videos about C++ programming, rendering 3D Graphics, the CopperSpice libraries, and documenting with DoxyPress. Please subscribe to our YouTube channel so you will be notified when new videos are uploaded.

https://www.youtube.com/copperspice

Presentations

Links to technical presentations recorded at CppNow and CppCon. There are also several slide decks from talks given at multiple C++ user groups in the San Francisco Bay Area, Amsterdam, Munich, and London.

www.copperspice.com/presentations.html

License

The CopperSpice libraries are released under the LGPL V2.1 license. The open source libraries CsSignal, CsString, and libGuarded are released under the BSD license. For more information refer to the LICENSE files provided with each project.