Можно ли запрограммировать функцию в SLOT () Qt для QWidget или следует использовать QSignalMapper?

В своем приложении Qt я динамически создаю «Вопросы» в QVBoxLayouts для «Анкеты». Есть 3 типа вопросов: булевы, текстовые, & Радио.

Когда пользователь «добавляет вопрос» в анкету, ему предоставляется QComboBox. Когда индекс / текст этого QComboBox отредактирован, я хочу воздействовать на испускаемый СИГНАЛ.

Я хотел бы иметь что-то вроде Java (из старого проекта Android):

button.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
//Code to run...
}
});

Можно ли иметь такое же в Qt / C ++, как:

connect(qvectorOfComboBoxes.at(qvectorOfComboBoxes.end()), SIGNAL(currentTextChanged(QString)),
this, SLOT(
void comboBoxTextChanged(QString newComboxBoxText)
{
//This doesn't work
} )) ;

Я понимаю из другого поста здесь идеальный подход это QSignalMapper, но надеялся выполнить задачу способом, аналогичным описанному выше.

Обычно я нахожу свои ответы здесь или в поиске по Google (возможно, я ищу не ту вещь, так как не знаю, как это называется), и поэтому надеялся, что кто-нибудь здесь может дать мне «да» или «нет». Спасибо

1

Решение

В Qt5 и с использованием компилятора с поддержкой C ++ 11 вы можете использовать лямбды как слоты, как объяснил здесь:

connect(sender, SIGNAL(signal(QString)), [](QString newComboxBoxText) {
// add your code here
});

В противном случае вы можете использовать sender() запросить QObject* который отправил сигнал, если это достаточно информации, вам нужно. Чтобы бросить его в QComboBox* пожалуйста, используйте qobject_cast<QComboBox*> а также Q_ASSERT что это не ноль. (Вы не можете получить ошибку во время компиляции, что это было связано с другим типом.)

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]