невозможно установить переменную publi c, используя сигнал в qt c ++ - PullRequest
0 голосов
/ 16 января 2020

Я создаю несколько кнопок Qlineedits / QPush в al oop. Если текст изменяется или нажимается кнопка, мне нужно знать переменную, которую я также создаю в этом l oop. Я новичок в c ++ qt (в прошлом немного работал с pyqt) и не могу понять, как это сделать.

Я думал, что лучшим способом было бы создать переменную publi c (int workingID) и использовать лямбда-функцию с сигналом. Тем не менее, я получаю ошибку «нет соответствующей функции-члена» с лямбда-выражением.

for (int j =0; j<myTestNames.length(); j++){
    int currentID = j;
    QLineEdit *testTitle = new QLineEdit(TestNames[j]); 
    connect(testTitle , SIGNAL(editingFinished()) ,  [=]() { this->workingID = currentID ;} );
}

Я могу получить ошибку до go, используя этот формат, но я не могу передать переменную this way.

connect(testTitle , SIGNAL(editingFinished()) , this, SLOT(testTitleChanged(currentID)) );

Я пробовал так много вариантов лямбда-функции, но не могу заставить ее работать.

Может кто-нибудь пролить свет на это?

Спасибо заранее.

1 Ответ

2 голосов
/ 16 января 2020

Пояснение

connect(testTitle , SIGNAL(editingFinished()) , [=]() { this->workingID = currentID ;} );

...

Я получаю сообщение об ошибке «Нет функции-члена» с лямбда-выражением.

Правильное сообщение об ошибке: не существует соответствующей версии QObject::connect(), которая принимает макрос SIGNAL() и лямбду.

Вы должны выбрать один из двух синтаксисов QObject::connect() :

  1. Старый синтаксис на основе строк: SIGNAL() и SLOT() макросы, ИЛИ
  2. Новый синтаксис на основе функторов: указатели на функции и лямбды

Я рекомендую # 2. См. Статью Различия между строковыми и функторными соединениями для сравнения двух синтаксисов.

Правильный код

connect(testTitle, &QLineEdit::editingFinished,  [=](){
    this->workingID = currentID;
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...