ДК
Наурыз 16, 2020, 8: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, 3:41 Т.Қ.

Добрый день

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

    ДК
    • Наурыз 17, 2020, 5:41 Т.Қ.
    • (өңделген)

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

      Evgenii Legotckoi
      • Наурыз 17, 2020, 5:53 Т.Қ.

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

        Пікірлер

        Тек рұқсаты бар пайдаланушылар ғана пікір қалдыра алады.
        Кіріңіз немесе Тіркеліңіз