CopperSpice is of a set of individual libraries used to develop cross platform software applications in C++.
You can use CopperSpice with many existing tool chains from the command line, from QtCreator, VI, emacs or your
preferred development environment using CMake or Autotools.
It is an open source project released under the LGPL V2.1 license and was derived from the Qt framework.
Our motivation for developing CopperSpice was to change the fundamental design and turn their 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.
CopperSpice consists of the following libraries with can be linked into any existing C++ application.
- Meta-Object Compiler (moc)
- The Meta-Object Compiler is no longer required for generating meta data
- Since moc is no longer required it was removed
- The functionality 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 types
- Complex data types can be used without restrictions, for example the following is valid in CopperSpice: QMap<QString, int>
- Major Enhancements
- CopperSpice makes extensive use of modern C++ features like variadic templates, constexpr, SFINAE, type traits, lambdas, atomics, tuple, etc
- CopperSpice includes many of the Qt 5 classes
- Improved CsNetwork, adding support for OpenSSL 1.0.x
- Implement QMultiHash and QMultiMap as separate classes from QHash and QMap
- Reimplement container classes (QVector, QList, QLinkedList, QMap, QHash, etc) in CsCore
- Classes leverage the C++ standard library containers, iterators, and algorithms
- Container classes support both the STL and Qt API
- Added new QFlatMap class
- An ordered map
- Stores elements in contiguous memory as a sorted vector of pairs
- 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 of Unicode strings
- Adding QString8 (UTF-8) and QString16 (UTF-16)
- Moved various formatting methods to the new QStringParser class
- The CopperSpice libraries can be built using CMake or GNU Autotools
- Any C++ application using CopperSpice can be built with CMake, GNU Autotools, or any other build system
- CopperSpice can be linked directly into any standard C++ application
For more information refer to our presentations from CppNow, CppCon, and our YouTube videos. Presentations
Converting to CopperSpice
The process of converting to CopperSpice is simple and quick. Simply convert your Qt application header files one time using our PepperMill utility. The Makefiles from our demo program KitchenSink, DoxyPress,or and the Diamond Editor applications can be used as a guide to create your project files.
The CS Overview documentation includes how to build CopperSpice from soucre, setting up a project using CopperSpice, and how to migrate from Qt to CopperSpice. CS Overview Documentation