#cpp #qt5 #сигналы_слоты
Есть вот такой код: 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"))); подчеркивается красным но в консоли ошибок нет. В чем может быть причина?
Ответы
Ответ 1
Ответ kff из комментария: В connect нельзя задавать параметры слота. Параметр должен приходить из сигнала Дополню, что если сигнатура сигнала и слота не совпадает, либо необходимо выполнить дополнительные действия, то можно использовать новый синтаксис соединения сигналов и слотов, появившийся в Qt5, и lambda-выражения: QObject::connect(p, &QPushButton::clicked, this, [this]() { Q_EMIT ok("word"); });
Комментариев нет:
Отправить комментарий