Передача данных в слот не работает (через метод connect)

365
26 января 2017, 02:55

Есть вот такой код:

test.h

class test : public QObject{
    Q_OBJECT
private:
...............................................
public:
    test();
public slots:
    void txt();
signals:
    void ok();
};

test.cpp

test::test(){
................................................
    connect(p, SIGNAL(clicked()), SIGNAL(ok()));
}
void test::txt(){
    l->setText("ok");
}

main.cpp

....................................................
test a, b;
QObject::connect(&a, SIGNAL(ok()), &b, SLOT(txt()));
QObject::connect(&b, SIGNAL(ok()), &a, SLOT(txt()));
....................................................

Работает он замечательно. Но стоит добавить параметры передачи значений в слот как код перестает работать. Вот пример:

test.h

class test : public QObject{
    Q_OBJECT
private:
................................................
public:
    test();
public slots:
    void txt(QString);
signals:
    void ok(QString);
};

test.cpp

test::test(){
......................................................
    connect(p, SIGNAL(clicked()), SIGNAL(ok("word")));
}
void test::txt(QString s){
    l->setText("ok");
}

main.cpp

....................................................
test a, b;
QObject::connect(&a, SIGNAL(ok()), &b, SLOT(txt()));
QObject::connect(&b, SIGNAL(ok()), &a, SLOT(txt()));
....................................................

Этот код собирается но слот не отрабатывает, и почему то в редакторе строка:

connect(p, SIGNAL(clicked()), SIGNAL(ok("word")));

подчеркивается красным но в консоли ошибок нет. В чем может быть причина?

Answer 1

Ответ kff из комментария:

В connect нельзя задавать параметры слота. Параметр должен приходить из сигнала

Дополню, что если сигнатура сигнала и слота не совпадает, либо необходимо выполнить дополнительные действия, то можно использовать новый синтаксис соединения сигналов и слотов, появившийся в Qt5, и lambda-выражения:

QObject::connect(p, &QPushButton::clicked, this, [this]() {
    Q_EMIT ok("word");
});
READ ALSO
Запустить .exe файлы c++

Запустить .exe файлы c++

Подскажите, пожалуйстаМне нужно создать 2 exe-файла: test1

323
Могут ли функции иметь один адрес?

Могут ли функции иметь один адрес?

В ответе говорится, что Open Watcom компилирует такой код

341
Как импортировать Sakila Database в phpMyAdmin?

Как импортировать Sakila Database в phpMyAdmin?

Когда импортирую через инструмент импорт, пишет что нет таблиц, либо они пустыеВозможно, кто-то сталкивался с такого рода импортом и сможет...

303