Russian Qt Forum
Ноябрь 26, 2024, 02:27 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Сигнал не доходит до слота. Где искать ошиб&#  (Прочитано 4054 раз)
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) ?


« Последнее редактирование: Апрель 10, 2013, 22:11 от fedotok » Записан
carrygun
Гость
« Ответ #1 : Апрель 11, 2013, 05:29 »

Выглядит вроде правильно, разве что не видно есть ли Q_OBJECT. Может стоит приложить минимальный компилируемый проект?
Записан
fedotok
Гость
« Ответ #2 : Апрель 11, 2013, 19:05 »

Оба класса унаследованы от QObject.
В проекте много лишнего.


Бывают ли у Qt creator ошибки в создаваемых им moc файлах?
Записан
Bepec
Гость
« Ответ #3 : Апрель 11, 2013, 19:10 »

нет. У вас что-то неправильно. Не грешите пенять на Qt/троллей/микрософт/компьютер. Грешите на собственные руки.
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #4 : Апрель 11, 2013, 19:22 »

Оба класса унаследованы от QObject.

Есть ли Q_OBJECT??

Бывают ли у Qt creator ошибки в создаваемых им moc файлах?

нет (moc файлы создаёт moc.exe).
Записан
fedotok
Гость
« Ответ #5 : Апрель 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
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #6 : Апрель 11, 2013, 21:01 »

этот код не компилится, не имеет самодостаточную логику и для формы даже не вызывается show(), имей уважение!

После чистки и исправления ошибок всё работает. Прозреваю, что что сигналы и слоты добавлялись, а qmake не вызывался. Сделай полную пересборку проекта.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.101 секунд. Запросов: 22.