Generate QML-friendly QObject-based C++ classes from class definition files
Project description
qpropgen
A tool to generate QML-friendly QObject-based C++ classes from class definition files.
Install it with:
pip install qpropgen
Quick Intro
Declaring properties in a QObject class requires writing a lot of boilerplate code. qpropgen goal is to write this boilerplate for you.
Suppose we want to create a Person
class, with firstName
, lastName
and
birthDate
properties.
First we create a class definition file named person.yaml
with the following
content:
class: Person
properties:
- name: firstName
type: QString
- name: lastName
type: QString
- name: birthDate
type: QDateTime
Next, we generate its header and implementation with qpropgen person.yaml
.
This produces two files: person.h
and person.cpp
(The filenames are based
on the filename of the class definition).
Note: in practice, you probably want to inherit from the generated classes to implement other aspects of the class to create and/or to override getters and setters.
Syntax of class definition files
A class definition file must contain the following fields:
-
class
: the name of the class to generate. -
properties
: the list of its properties (see below).
It may also contain the following fields:
-
includes
: a list of files to include in the header. -
baseClass
: name of the class to inherit from. Defaults toQObject
. -
defaults
: default values for some property attributes (see below).
The properties
field
properties
is an array of property definitions.
A property definition must contain the following fields:
type
name
It may contain the following fields:
-
access
: Can beprivate
orprotected
. Defines the access modifier for the generated member variables. Defaults toprivate
. -
mutability
: One ofconstant
,readonly
,readwrite
. Defaults toreadwrite
. -
argType
: The type of the setter argument. If not set qpropgen uses const references for types which are not pointers and not known scalars (int, bool, qreal). -
varName
: Name of the variable backing the property. Defaults tom<Name>
, so the variable of thefoo
property will bemFoo
. -
setterName
: Name of the setter. Defaults toset<Name>
, so the setter of thefoo
property will besetFoo
. -
impl
: One ofplain
(getter and setter),virtual
(virtual getter and setter) orpure
(virtual pure getter and setter). -
value
: The default value of the property.
The defaults
field
Adding a field to the defaults
object lets you define default values for all
properties.
For example you can define that all properties are of type qreal
by default
with:
defaults:
type: qreal
Of course fields which require a unique value, like name
, should not have a
default.
Build system integration
The cmake/qpropgen.cmake
can be included in your project to integrate
qpropgen. It takes care of finding the qpropgen
executable and provides a
qpropgen()
CMake function.
This CMake function lets you define .yaml files to process. For example:
set(prj_SRCS main.cpp)
qpropgen(prj_QPROPGEN foo.yaml bar.yaml)
add_executable(prj ${prj_SRCS} ${prj_QPROPGEN})
Examples
The examples/
directory contains examples of the various settings. The
produced executable does nothing, but you can look in the build directory at
the .h and .cpp files produced by qpropgen during the build.
Tests
The project currently lacks real unit tests, so the examples serve as tests:
the ./tests.sh
script can be run to build the examples.
Trivia
I started this project when I was working on the SFXR-Qt sound generator (a QtQuick port of SFXR), and was finding it too tedious to declare all the properties necessary to represent sounds :)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file qpropgen-0.1.2.tar.gz
.
File metadata
- Download URL: qpropgen-0.1.2.tar.gz
- Upload date:
- Size: 7.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.18.4 setuptools/39.0.1 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.6.6
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | d7745d6d25d428fde373ea3b1c9f8436e380c9bc6b9ffde3ce02a037a55ba4f6 |
|
MD5 | 465653457aae834df58eebd1762d03d0 |
|
BLAKE2b-256 | bde6e8ea64dc71720c616e7394133181699710a60867d9a78ebb95fa4481c7de |