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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QСoreApplication не могу соединить сигнал и слот  (Прочитано 3521 раз)
INZER
Гость
« : Сентябрь 05, 2012, 13:01 »

Всем привет первый раз пишу консольное приложение на Qt
Никак не могу подцепить сигнал и слот помогите кто сталкивался с подобным

В функции start1 сокет не соединяется со слотом:
Ошибка: Object::connect: No such slot QObject::slotReadDatagramm()

Код:
client.pro
Код:
QT       += core network

QT       -= gui

TARGET = consoleClient
CONFIG   += console
CONFIG   -= app_bundle

TEMPLATE = app


SOURCES += main.cpp \
    client.cpp

HEADERS += \
    client.h

main.cpp
Код:
#include <QtCore/QCoreApplication>
#include "client.h"
#include <QDebug>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    if (argc < 2)
    {
        qDebug() << "ERROR: 111";
        exit (1);
    }
    bool ok;
    uint number = QString(argv [1]).toUInt(&ok);
    if (!ok)
    {
        qDebug() << "ERROR: 222";
        exit (2);
    }
    client clent(number);
    clent.start1();
    return a.exec();
}

client.h
Код:
#ifndef CLIENT_H
#define CLIENT_H

#include <QObject>

class QUdpSocket;

class client: public QObject
{
public:
    client(unsigned int number);
    ~client ();
    void start1 ();
private:
    unsigned int logicalNumber;
    QUdpSocket * socket;
    void processDatagramm (QByteArray datagramm);
public slots:
    void slotReadDatagramm ();
    void slotConnected ();
    void slotDisconnect ();
};

#endif // CLIENT_H

client.cpp
Код:
#include "client.h"
#include <QUdpSocket>
#include <QDateTime>
#include <QCoreApplication>


client::client(unsigned int number)
{
    logicalNumber = number;
}

client::~client()
{
    slotDisconnect();
}

void client::start1()
{
    socket = new QUdpSocket ();
    connect(socket,SIGNAL(readyRead()), this,SLOT(slotReadDatagramm()));
    socket->connectToHost(QHostAddress::LocalHost,65000);
}

void client::slotConnected()
{
    qDebug() << "Connected! IP: " + socket->localAddress().toString() + "; port: " + QString::number(socket->localPort());
    unsigned char datagramm [3];
    datagramm[0] = 0x01;
    datagramm[1] = logicalNumber >> 8;
    datagramm[2] = logicalNumber & 0xFF;
    socket->write((char*)datagramm,3);
}

void client::slotDisconnect()
{
    unsigned char datagramm [3];
    datagramm[0] = 0x02;
    datagramm[1] = logicalNumber >> 8;
    datagramm[2] = logicalNumber & 0xFF;
    socket->write((char*)datagramm,3);
}

void client::slotReadDatagramm()
{
    while (socket->hasPendingDatagrams())
    {
        QByteArray datagramm;
        datagramm.resize(socket->pendingDatagramSize());
        QHostAddress sender;
        quint16 prt;
        socket->readDatagram(datagramm.data(),datagramm.size(),&sender,&prt);
        processDatagramm(datagramm);
    }
}

void client::processDatagramm(QByteArray datagramm)
{
    if (datagramm.at(0) == 0x02)
    {
        exit(0);
    }
    else
    {
        qDebug () << QDateTime::currentDateTime().toString("dd.MM.yyyy hh.mm.ss") + ": Incoming message -" + QString(datagramm).toLatin1();
    }
}

Записан
mutineer
Гость
« Ответ #1 : Сентябрь 05, 2012, 13:04 »

Макрос Q_OBJECT забыл
Записан
INZER
Гость
« Ответ #2 : Сентябрь 05, 2012, 13:24 »

Я же наследовался от QObject
Попробовал добавил макрос ... стало что то с vtable непонятное.
Ругается на конструктор и деструктор
Вообще ничего не понимаю

Код:
class client: public QObject
{
    Q_OBJECT
public:
    client(unsigned int number);
    ~client ();

Записан
mutineer
Гость
« Ответ #3 : Сентябрь 05, 2012, 13:26 »

Когда наследуешься от QObject и хочешь юзать сигналы-слоты надо ставить макрос

Если стало с vtable непонятно, то надо все сборочные поторха удалить подчистую, выполнить qmake и пересобрать все заново
Записан
INZER
Гость
« Ответ #4 : Сентябрь 05, 2012, 13:54 »

Спасибо! Заработало)
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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