-
Couldn't load subscription status.
- Fork 879
Coding Style
The coding style of the project is based on the coding style of Qt. An overview of this coding style can be found here:
Important: Note that like the KDE Frameworks Coding Style we have one exception on top of the Qt one: we use curly braces even when the body of a conditional statement contains only one line.
Member variables should be prefixed with a underscore. For example write _myClassVariable instead of myClassVariable.
Every header file should contain a copyright note and #pragma once should preferred instead of #ifndef header guards.
When possible use data structures from Qt. For example use QVector instead of std::vector.
When possible use algorithms from the STL or Qt. For example use std::copy_if instead of coding it by hand.
QSharedPointer should be used instead of std::shared_ptr. However, it is okay to use a STL smart pointer if there is no equivalent in Qt, like std::unique_ptr.
Assuming a member named _value in a class inheriting from QObject, it is common to expect the following:
- a
Q_PROPERTYnamedvalue(with theNOTIFYpart referring to the signal if it applies); - a getter
type value() const; - a setter
void setValue(type value) - a signal
void valueChanged(type value)
Note that if the type of _value is bool, then the getter is expected to be named isValue() and not value().
One should return from functions by value, for instance: QVector<int> computeValues();
Returning references or const references should be the exception not the rule. Similarly values should be received by value not by reference: const auto values = computeValues();
Although const auto &values = computeValues(); is semantically correct it looks foreign in the code base. We favor consistency.
Names of unit tests should follow the scheme proposed by Roy Osherove in his book The Art of Unit Testing. The general scheme is:
void testUnitOfWork_stateUnderTest_expectedBehaviour()
It is explained here.
The following shows how a class that inherits from QObject should be declared:
class Foo : public QObject
{
Q_OBJECT
Q_PROPERTY(....)
public:
enum Bar {
};
Q_ENUM(Bar)
static void staticMethods();
explicit Foo(QObject *parent = nullptr);
bool publicMethod() const;
signals:
void mySignal();
protected slots:
void protectedSlot();
protected:
void protectedMethod();
private slots:
void privateSlot();
private:
void privateMethod();
bool _member;
};