ДК
16 марта 2020 г. 20:27

Передать вектор слотов в метод

Qt, С++, slots

Привет. Какой тип данных указать для вектора?
так нельзя, пробовал всё, что только в голову пришло const QMetaMethod &, QObject *, const QMetaObject & и пр. но везде подчеркивает- no matching constructor for initialization...

  1. QVector<const char *> vec { &SomeClass::foo };

мне нужно передать вектор слотов и потом сделать с ними коннект.

2

Вам это нравится? Поделитесь в социальных сетях!

3
Evgenii Legotckoi
  • 17 марта 2020 г. 15:41

Добрый день

А вы уверены, что действительно хотите этого? QVector - это шаблонный класс, а значит вы сможете туда передавать только объекты одного типа, ну или связанные полиморфизмом. То есть по сути как указатели на методы только с одинаковой сигнатурой, а значит смысла в векторе нет.
Единственный способ - это передавать макросы слотов, что приведёт к использованию SFINAE и весьма уродливому и трудноподдерживаемому коду, не говоря уже о том, что вы завязнете в испльзовании DEPRECATED кода Qt4. А человек, который потом будет поддерживать после вас ваш код, проклянёт вас.

    ДК
    • 17 марта 2020 г. 17:41
    • (ред.)

    Добрый день. Я мыслю также, но, к сожалению, меня не услышали и пришлось передавать const char *, макросами SLOT(). Еще пообсуждаем. Просто задача упростить, а в итоге всё усложнилось мне кажется.

      Evgenii Legotckoi
      • 17 марта 2020 г. 17:53

      По сути, если вопрос не стоит в переписывании ядра Qt (там свои погремушки и иначе не сделаешь), то подобные выверты есть дурацкий изврат, который приведёт к усложнению кода, для поддержания которого потом придётся нанимать программиста с уровнем Senior и выше, причём с большим опытом использования Qt в реально больших проектах, где действительно подобные вещи использовались, то есть даже среди опытных прогграммистов Qt, в лучшем случае один из четырех подойдёт, чтобы потом разгрести подобные "упрощения"

        Комментарии

        Только авторизованные пользователи могут публиковать комментарии.
        Пожалуйста, авторизуйтесь или зарегистрируйтесь