Можно ли обобщить Q_PROPERTY для нескольких базовых классов? - PullRequest
0 голосов
/ 18 октября 2018

Я пытаюсь написать оболочку для некоторых данных, которые будут храниться в контейнере.Эти данные будут взаимодействовать с QML и впредь будут содержать Q_PROPERTIES.Однако я хочу, чтобы эти данные были получены из определенного базового класса, чтобы я мог вызывать переопределенные методы без приведения.Вот пример.

class Base : public QObject
{
    Q_OBJECT
    Q_PROPERTY(int value READ value WRITE setValue NOTIFY valueChanged)

public:
    /*implementation is irrelevant, just boilerplate code*/
}

class BaseBool : public Base {
    Q_PROPERTY(bool value READ value WRITE setValue NOTIFY valueChanged)

public:
        /*I want to override the functions here so I can just call them
        like I would for a base class, but I want them to be different types.
        I want to extend this for other types too.*/
}

Надеюсь, это имеет смысл.Очевидно, что что-то шаблонизирующее класс и имеющее Q_PROPERTY типа T было бы идеальным, однако это невозможно с текущим Qt.Есть ли достойные решения для этого?Возможно, есть более подходящие шаблоны для решения этой проблемы, но сейчас я в растерянности.

1 Ответ

0 голосов
/ 19 октября 2018

Все метаданные Qt могут быть сгенерированы во время выполнения или с использованием компилятора C ++, а не moc.Эти свойства могут быть синтезированы на лету или во время компиляции и не будут проблемой для шаблонного класса.То, что вы ищете, это Verdigris .Если у вас достаточно современный компилятор, тогда Verdigris - это все, что вам нужно:

[Вам] нужен компилятор, который может выполнять расслабленный constexpr на C ++ 14, такой как GCC 5.1 или Clang 3.5, илиMSVC 2017

...