Как получить сигнал для вызова функции с определенными аргументами? - PullRequest
1 голос
/ 23 февраля 2012

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


QPushButton *yes = new QPushButton("Yes");
yes->connect(yes, SIGNAL(clicked()), NULL, SLOT(printf("You pressed a button")));

Как мне это сделать?

Ответы [ 3 ]

2 голосов
/ 23 февраля 2012

Часто упускаемый способ изменить отношения сигнал / слот: QObject :: sender .Вы можете вызвать его в приемном слоте, чтобы получить указатель на QPushButton (используя qobject_cast) и получить оттуда текст.В качестве альтернативы вы можете использовать QSignalMapper для увеличения сигналов.

1 голос
/ 23 февраля 2012

Это кажется очень неэффективным, но вы можете создать новый сигнал с аргументом QString, который вы подключите к своей кнопке.Содержащийся текст будет определен в вашем вызове emit.

например.

connect(yes, SIGNAL(clicked()), this, SLOT(emitHelloWorldText());
connect(this, SIGNAL(emitText(QString)), receiver, SLOT(dostuffWithText(QString)));

тогда ваш emitHelloWorldText метод может быть чем-то вроде

void emitHelloWorldText() {
    emit emitText("Hello world");
}

Тогда это может быть получено вашим приемником класса

void doStuffWithText(const QString &text) {
0 голосов
/ 23 февраля 2012

К сожалению, слот и сигнал должны иметь совпадающие аргументы. Если вам действительно нужно придерживаться этого интерфейса, вы можете создать промежуточный слот для распространения полученного сигнала, но реального пути назад нет.

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