Функция подключения к динамически сделанному QPushButton - PullRequest
0 голосов
/ 18 января 2019

Извините, этот вопрос, возможно, повторяется, но я должен спросить, так как не могу заставить его работать.

Я динамически создаю QPushButtons с циклом for вот так.

 for (int var = 0; var < size; ++var) {
     QPushButton *copyr = new QPushButton("copy");
     ...
}

Я успешно добавляю эти новые виджеты в макет, но не могу привязать к ним функцию. Я пытаюсь подключить эту кнопку на SLOT, как и предлагали многие источники в Интернете:

connect (copyr , SIGNAL( clicked() ), this, SLOT( c2c(txt) ) );

но я не могу заставить его работать, и я получаю сообщение об ошибке вроде:

No such SLOT ClassName::c2c(txt)

событие, оно обычно определяется в файле .h и также существует в файле .cpp. Любые идеи, почему это происходит и как это исправить?

1 Ответ

0 голосов
/ 18 января 2019

Прежде всего, используйте новый синтаксис для соединений:

connect(copyr, &QPushButton::clicked, this, &ClassName::c2c);

Однако вы не можете подключить сигнал, который не предоставляет параметр, к слоту, который его ожидает. Здесь у вас есть несколько вариантов:

  • Полностью удалите параметр из слота и получите значение из слота.
  • Укажите параметр по умолчанию в объявлении слота, чтобы его можно было вызывать без аргументов
  • Оберните соединение в лямбду, если вы хотите, чтобы параметр из кода соединения поступил в слот, как это:

    connect( copyr, &QPushButton::clicked, [this, txt](){ this->c2c(txt); } );

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...