Russian Qt Forum

Qt => Вопросы новичков => Тема начата: fedotok от Апрель 10, 2013, 22:09



Название: Сигнал не доходит до слота. Где искать ошиб&#
Отправлено: 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 не вызывался. Сделай полную пересборку проекта.