Название: QСoreApplication не могу соединить сигнал и слот
Отправлено: INZER от Сентябрь 05, 2012, 13:01
Всем привет первый раз пишу консольное приложение на Qt Никак не могу подцепить сигнал и слот помогите кто сталкивался с подобным В функции start1 сокет не соединяется со слотом: Ошибка: Object::connect: No such slot QObject::slotReadDatagramm()Код:client.proQT += 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(); } }
Название: Re: QСoreApplication не могу соединить сигнал и слот
Отправлено: mutineer от Сентябрь 05, 2012, 13:04
Макрос Q_OBJECT забыл
Название: Re: QСoreApplication не могу соединить сигнал и слот
Отправлено: INZER от Сентябрь 05, 2012, 13:24
Я же наследовался от QObject Попробовал добавил макрос ... стало что то с vtable непонятное. Ругается на конструктор и деструктор Вообще ничего не понимаю class client: public QObject { Q_OBJECT public: client(unsigned int number); ~client (); (http://s019.radikal.ru/i629/1209/e0/b0d58f4f4961.jpg)
Название: Re: QСoreApplication не могу соединить сигнал и слот
Отправлено: mutineer от Сентябрь 05, 2012, 13:26
Когда наследуешься от QObject и хочешь юзать сигналы-слоты надо ставить макрос
Если стало с vtable непонятно, то надо все сборочные поторха удалить подчистую, выполнить qmake и пересобрать все заново
Название: Re: QСoreApplication не могу соединить сигнал и слот
Отправлено: INZER от Сентябрь 05, 2012, 13:54
Спасибо! Заработало)
|