Я хотел бы послать функции динамически в SLOT - Идея заключается в том, чтобы иметь такую же установку кнопки (сделать повторное использование кода), но с различными обработчиками:Динамически вызов функции внутри SLOT
Функции вызова:
buttonSetup(loginButton, "Login", 100, 200, 100, 25, &KHUB::handleLogin);
buttonSetup(registerButton, "Register", 225, 200, 100, 25, &KHUB::handleRegister);
настройка
функции:
void KHUB::buttonSetup(QPushButton *button, const QString name, int posX, int posY, int width, int height, void(KHUB::*fptr)())
{
button = new QPushButton(name, this);
button->setGeometry(QRect(QPoint(posX, posY), QSize(width, height)));
//Event Listener
connect(button, SIGNAL(released()), this, SLOT(fptr));
}
Я пытался передать функцию в качестве параметра и получить его имя на основе указателя (который не представляет, как именно располагаются код здесь), но я не уверен, что это лучшее решение или даже решение. Кто-нибудь знает, если это возможно и как я могу это сделать?
Edited как указано на @Slyps [Рабочий код]:
Вызов функции: Настройка
buttonSetup(&loginButton, "Login", 100, 200, 100, 25, &KHUB::handleLogin);
buttonSetup(®isterButton, "Register", 225, 200, 100, 25, &KHUB::handleRegister);
Функция:
void KHUB::buttonSetup(QPushButton **button, const QString name, int posX, int posY, int width, int height, void(KHUB::*fptr)())
{
*button = new QPushButton(name, this);
(*button)->setGeometry(QRect(QPoint(posX, posY), QSize(width, height)));
//Event Listener
connect(*button, &QPushButton::released, this, fptr);
}
На стороне узла: Какова ваша цель параметра 'button'? Вы не получаете адрес вновь созданного QPushButton в переменную 'loginButton/registerButton' области, в которой вы вызываете' buttonSetup'. Для этого вам нужно использовать '**'. И если вы не хотите использовать 'loginButton/registerButton' в этой области, то параметр бесполезен. – Slyps
Вы правы, это сбой приложения –