Название: Сигнал не доходит до слота. Где искать ошиб
Отправлено: fedotok от Апрель 10, 2013, 22:09
Имею ImitMainWindow.h ...... signals: void signal_connect(QHostAddress host, int port); ..... ImitMainWindow.cpp ..... void ImitMainWindow::on_btnConnectClicked(QHostAddress host, int port) { _host = host; _port = port; qDebug() << "ImitMainWindow::on_btnConnectClicked()"; emit signal_connect(_host, _port); } ...... imitator.h .... public slots: void imitatorconnect(QHostAddress host, int port); private: QHostAddress _host; int _port;
ImitMainWindow *imitatorWindow; imitator.cpp .... imitatorWindow = new ImitMainWindow();
connect(imitatorWindow,SIGNAL(signal_connect(QHostAddress,int)),this,SLOT(imitatorconnect(QHostAddress,int)));
......
void Imitator::imitatorconnect(QHostAddress host, int port) { qDebug() << "Imitator::imitatorconnect"; } вывод приложения гласит: ImitMainWindow::on_btnConnectClicked() Почему не заходит в слот void Imitator::imitatorconnect(QHostAddress host, int port) ?
Название: Re: Сигнал не доходит до слота. Где искать ошиб&#
Отправлено: carrygun от Апрель 11, 2013, 05:29
Выглядит вроде правильно, разве что не видно есть ли Q_OBJECT. Может стоит приложить минимальный компилируемый проект?
Название: Re: Сигнал не доходит до слота. Где искать ошиб&#
Отправлено: fedotok от Апрель 11, 2013, 19:05
Оба класса унаследованы от QObject. В проекте много лишнего.
Бывают ли у Qt creator ошибки в создаваемых им moc файлах?
Название: Re: Сигнал не доходит до слота. Где искать ошиб&#
Отправлено: Bepec от Апрель 11, 2013, 19:10
нет. У вас что-то неправильно. Не грешите пенять на Qt/троллей/микрософт/компьютер. Грешите на собственные руки.
Название: Re: Сигнал не доходит до слота. Где искать ошиб&#
Отправлено: Alex Custov от Апрель 11, 2013, 19:22
Оба класса унаследованы от QObject.
Есть ли Q_OBJECT?? Бывают ли у Qt creator ошибки в создаваемых им moc файлах?
нет (moc файлы создаёт moc.exe).
Название: Re: Сигнал не доходит до слота. Где искать ошиk
Отправлено: fedotok от Апрель 11, 2013, 20:34
#ifndef IMITATOR_H #define IMITATOR_H #include "imitmainwindow.h" #include <QObject>
class Imitator : public QObject { Q_OBJECT public: explicit Imitator(QObject *parent = 0); public slots: void imitatorconnect(QHostAddress host, int port); signals: private: QHostAddress _host;
int _port;
bool imitatorConnected;
ImitMainWindow *imitatorWindow; };
#endif // SEACARGOIMITATOR_H #include "imitator.h"
Imitator::SeaCargoImitator(QObject *parent) : QObject(parent) {
imitatorWindow = new ImitMainWindow();
connect(imitatorWindow,SIGNAL(signal_connect(QHostAddress,int)),this,SLOT(imitatorconnect(QHostAddress,int))); }
void Imitator::imitatorconnect(QHostAddress host, int port) { qDebug() << "SeaCargoImitator::imitatorconnect"; } } #ifndef IMITMAINWINDOW_H #define IMITMAINWINDOW_H
#include <QMainWindow>
namespace Ui { class ImitMainWindow; }
class ImitMainWindow : public QMainWindow { Q_OBJECT public: explicit ImitMainWindow(QWidget *parent = 0); ~ImitMainWindow(); public slots: void on_btnConnectClicked(QHostAddress host, int port); signals: void signal_connect(QHostAddress host, int port); private: Ui::ImitMainWindow *ui;
QHostAddress _host;
int _port; }; #include "imitmainwindow.h" #include "ui_imitmainwindow.h"
inline QString rus(const char* str) { return (QApplication::translate(0,str,0,QApplication::UnicodeUTF8)); }
ImitMainWindow::ImitMainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::ImitMainWindow) {
ui->setupUi(this); }
ImitMainWindow::~ImitMainWindow() { delete ui; }
void ImitMainWindow::on_btnConnectClicked(QHostAddress host, int port) { _host = host; _port = port; qDebug() << "ImitMainWindow::on_btnConnectClicked()" << _host << _port; emit signal_connect(_host, _port); }
#endif // IMITMAINWINDOW_H
Название: Re: Сигнал не доходит до слота. Где искать ошиб&#
Отправлено: Alex Custov от Апрель 11, 2013, 21:01
этот код не компилится, не имеет самодостаточную логику и для формы даже не вызывается show(), имей уважение!
После чистки и исправления ошибок всё работает. Прозреваю, что что сигналы и слоты добавлялись, а qmake не вызывался. Сделай полную пересборку проекта.
|