Как вызвать слот с аргументами, когда диалог принят? - PullRequest
0 голосов
/ 28 октября 2018

У меня есть QDialogButtonBox:

QDialogButtonBox buttonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, Qt::Horizontal, &dialog);

И когда пользователь нажимает кнопку Ok, я хочу вызвать слот с 2 QString аргументами.Я пытался использовать сигналы, но не могу заставить его работать.

Я пытался сделать что-то вроде этого:

 connect(buttonBox, &QDialogButtonBox::accepted, this, 
        App::replace);

App::replace - это слот, который я хочу вызвать, ноЯ не знаю, как передать аргументы.

Как мне этого добиться?

Ответы [ 2 ]

0 голосов
/ 17 декабря 2018

В качестве альтернативы @ ответа Арсена , вы можете connect лямбда, которая предоставляет необходимые аргументы

connect(buttonBox, &QDialogButtonBox::accepted, this, [this](){ replace(value1, value2); });
0 голосов
/ 28 октября 2018

Вы можете создать слот и в этом слоте вызывать запрошенную вами функцию следующим образом.

...
connect(buttonBox, SIGNAL(accepted()), this, SLOT(accept()));
connect(buttonBox, SIGNAL(rejected()), this, SLOT(reject()));
...

//slot implementation
void CLASS::accept()
{
    foo(QString1, QString2);
}

Что-то похожее на это.В вашем конкретном случае это будет выглядеть следующим образом:

...
connect(buttonBox, SIGNAL(accepted()), this, SLOT(accept()));
connect(buttonBox, SIGNAL(rejected()), this, SLOT(reject()));
...

//slot implementation
void App::accept()
{
    replace(QString1, QString2);
}

Причина в том, что слот может принимать меньше или равные аргументы, которые предоставляет сигнал.В этом случае сигнал accepted не предоставляет никаких аргументов, поэтому вы не можете получить никаких аргументов.Для этого вы должны вручную собрать и передать их в свой слот.

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