Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Qt и кроссплатформенное программирование С/С++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.09.2015, 22:11   #1
ivan.tiran
Форумчанин
 
Аватар для ivan.tiran
 
Регистрация: 24.08.2011
Сообщений: 138
По умолчанию QObject::connect: No such slot mainform::AddTextUDP("Server start")

Доброго времени суток.
Начинаю писать на QT и столкнулся со следующей проблемой.
Коннект отказывается признавать слот, говорит, что он не найден.

У меня есть два класса.
В одном создаётся виджет со свистелками и .
В другом я пишу udp сервер.

При запуске сервера в QTextEdit формы должно вывестись сообщение о том, что сервер стартанул.
Но связь между сигналом класса-сервера и классом с виджетами происходит криво.
В текстовом редакторе строка
Код:
QObject::connect(&udp_socket,SIGNAL(server_start()),&Form1,SLOT(AddTextUDP("Server start")));
подчёркивается красной линией.
А при компиляции пишет:
Код:
QObject::connect: No such slot mainform::AddTextUDP("Server start") in ../server/main.cpp:18
Вот код класса с виджетами
header
Код:
#ifndef MAINFORM_H
#define MAINFORM_H

#include <QWidget>
#include <QTextEdit>
#include <QLabel>
#include <QHBoxLayout>
#include <QVBoxLayout>

class mainform : public QWidget
{
    Q_OBJECT

private:
    QTextEdit *udppole = new QTextEdit();
    QTextEdit *tcppole = new QTextEdit();
    QLabel *udpname = new QLabel("UDPServer-чат");
    QLabel *tcpname = new QLabel("TCPServer-чат");

    QHBoxLayout *polya = new QHBoxLayout;
    QHBoxLayout *labels = new QHBoxLayout;
    QVBoxLayout *all = new QVBoxLayout;

public:
    explicit mainform(QWidget *parent = 0);
    void make_widgets();
signals:

public slots:
    void AddTextUDP(QString txt);
};

#endif // MAINFORM_H
CPP
Код:
#include "mainform.h"

mainform::mainform(QWidget *parent) : QWidget(parent)
{

}

void mainform::make_widgets()
{
    udpname->setAlignment(Qt::AlignCenter);
    tcpname->setAlignment(Qt::AlignCenter);

    polya->addWidget(udppole);
    polya->addWidget(tcppole);


    labels->addWidget(udpname);
    labels->addWidget(tcpname);

    all->addLayout(labels);
    all->addLayout(polya);

    setLayout(all);
    resize(800,500);
}

void mainform::AddTextUDP(QString txt)
{
udppole->append(txt);
}
Код UDP сервера
HEADER
Код:
#ifndef UDPSOCKET_H
#define UDPSOCKET_H
#include <QUdpSocket>
#include <QThread>

class UDPSocket : public QThread//создаём udp_socket в отдельном потоке
{
Q_OBJECT
private:
QUdpSocket udp_socket;
QHostAddress address;
qint64 PORT;
public:
    UDPSocket(QHostAddress adr,qint64 port);
public slots:

void create_server();

signals:
void server_start();
void server_not_start();
};

#endif // UDPSOCKET_H
CPP
Код:
#include "udpsocket.h"

UDPSocket::UDPSocket(QHostAddress adr,qint64 port)
{
address=adr;
PORT=port;
}

void UDPSocket::create_server()
{
 if(udp_socket.bind(address,PORT)) emit server_start();
 else emit server_not_start();
}
Код маина
Код:
#include <QApplication>
#include "mainform.h"
#include "udpsocket.h"



int main(int argc,char ** argv)
{
    QApplication app(argc,argv);
   mainform Form1;


    Form1.make_widgets();
    Form1.show();


  UDPSocket udp_socket(QHostAddress("192.168.1.102"),5678);
QObject::connect(&udp_socket,SIGNAL(server_start()),&Form1,SLOT(AddTextUDP("Server start")));
udp_socket.create_server();

    return app.exec();
}

В чём проблема?
ivan.tiran вне форума Ответить с цитированием
Старый 12.09.2015, 06:46   #2
SAMOUCHKA
Форумчанин
 
Регистрация: 07.08.2011
Сообщений: 576
По умолчанию

Может быть из за того что сигнал server_start() определен без параметров, а слот
void AddTextUDP(QString txt); с параметром QString
SAMOUCHKA вне форума Ответить с цитированием
Старый 12.09.2015, 11:10   #3
ivan.tiran
Форумчанин
 
Аватар для ivan.tiran
 
Регистрация: 24.08.2011
Сообщений: 138
По умолчанию QObject::connect: No such slot QTextEdit::append("Получилось!") in ../simply/main.cpp:36

Цитата:
Сообщение от SAMOUCHKA Посмотреть сообщение
Может быть из за того что сигнал server_start() определен без параметров, а слот
void AddTextUDP(QString txt); с параметром QString
Я определённо что-то делаю не так.
Вот создал простейшую програмку, которая по нажатию на кнопку выводит текст в TextEdit. connect опять не хочет работать. Как-то не так я понял работу коннекта, в чём проблема?

Код:
#include <QApplication>
#include <QTextEdit>
#include <QPushButton>
#include <QVBoxLayout>
#include <QWidget>

int main(int argc,char ** argv)
{

    QApplication app(argc,argv);


    QTextEdit *txt = new QTextEdit;
    QPushButton *btn = new QPushButton("Нажми на меня");
    QVBoxLayout *vl = new QVBoxLayout;
    QVBoxLayout *lbtn = new QVBoxLayout;
    vl->addWidget(txt);
    lbtn->addWidget(btn);

    vl->addLayout(lbtn);
    lbtn->setAlignment(Qt::AlignCenter);

    btn->setFixedWidth(100);




    QWidget wgt;

    wgt.setLayout(vl);


    wgt.show();


    QObject::connect(btn,SIGNAL(clicked(bool)),txt,SLOT(append("Получилось!")));


    return app.exec();
}
ivan.tiran вне форума Ответить с цитированием
Старый 18.09.2015, 23:00   #4
SAMOUCHKA
Форумчанин
 
Регистрация: 07.08.2011
Сообщений: 576
По умолчанию

так и есть не поленился, проверил. При не совпадении параметров не коннектится
Код:
#include "widget.h"
#include <QPushButton>
#include <QVBoxLayout>
#include <QDebug>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    QPushButton *btn = new QPushButton("test signal slot");
    connect(btn, SIGNAL(clicked()), this, SLOT(slotTest("test")));

    QVBoxLayout *vb = new QVBoxLayout;
    vb->addWidget(btn);
    setLayout(vb);
}

Widget::~Widget()
{

}

void Widget::slotTest(QString test)
{
    qDebug()<<test;
}
SAMOUCHKA вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Process.Start("WinWord.exe") ольгаг Microsoft Office Word 10 01.12.2013 12:35
Постоянно слетает галочка "автоматически" в "Параметры Excel", "Формулы", "Вычисления в книге" Alexsandrr Microsoft Office Excel 4 19.10.2013 14:22
Process::Start("IExplorer.exe", "www.yandex.ru"); msemenikhin Visual C++ 0 02.02.2012 16:53
Ошибка при билдежке проекта "Can't start preprocessor (2)" PilGrim Общие вопросы .NET 1 13.05.2010 16:58
при вводе на листе "магазин"- код товара появлялось "описание" товара из "склада" с "продажной ценой" aleksei78 Microsoft Office Excel 13 25.08.2009 12:04