В своем приложении 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 (возможно, я ищу не ту вещь, так как не знаю, как это называется), и поэтому надеялся, что кто-нибудь здесь может дать мне «да» или «нет». Спасибо
В Qt5 и с использованием компилятора с поддержкой C ++ 11 вы можете использовать лямбды как слоты, как объяснил здесь:
connect(sender, SIGNAL(signal(QString)), [](QString newComboxBoxText) {
// add your code here
});
В противном случае вы можете использовать sender()
запросить QObject*
который отправил сигнал, если это достаточно информации, вам нужно. Чтобы бросить его в QComboBox*
пожалуйста, используйте qobject_cast<QComboBox*>
а также Q_ASSERT
что это не ноль. (Вы не можете получить ошибку во время компиляции, что это было связано с другим типом.)
Других решений пока нет …