Сигналы и слоты не работают :(
В общем не работают сигналы и слоты , не знаю что прям делать чтоб заработали :(
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QUdpSocket>
#include <QAbstractSocket>
#include <QHostAddress>
//#include <QRegExpValidator> not work in ubuntu 20 ;_;
#include <QValidator>
#include <QIntValidator>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
QString string_no_probel(QString &str);
// юдипи сокеты
QUdpSocket* m_pudp;
private:
Ui::MainWindow *ui;
private slots:
void on_pB_open_clicked();
void slotSendDatagram(int port_udp);
void slotProcessDatagrams();
void on_pB_send_clicked();
};
#endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
m_pudp = new QUdpSocket(this);
ui->setupUi(this);
ui->lE_enoverport->setValidator(new QIntValidator(ui->lE_enoverport));
ui->lE_localport->setValidator(new QIntValidator(ui->lE_localport));
// ui->lE_localport->setMaxLength(10);
// ui->lE_localport->setMaxLength(10);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pB_open_clicked()
{
// локальный порт
QString str_localport = ui->lE_localport->text();
string_no_probel(str_localport);
int int_localport = str_localport.toInt();
// qDebug() << "int_localport :" << int_localport;
// удалённый порт
QString str_enoverport = ui->lE_enoverport->text();
string_no_probel(str_enoverport);
int int_enoverport = str_enoverport.toInt();
// m_pudp = new QUdpSocket(this);
m_pudp->bind(QHostAddress::LocalHost, int_localport);
connect(m_pudp, SIGNAL(ui->pB_open->clicked()), this, SLOT(slotSendDatagram(int_enoverport))); // otpravka датаграмму
// connect(m_pudp, SIGNAL(readyRead()), this, SLOT(slotProcessDatagrams(int_localport)));
// connect(m_pudp, SIGNAL(error(QAbstractSocket::SocketError)),this, SLOT(slotError(QAbstractSocket::SocketError)));
// connect(m_pudp, &MainWindow::on_pB_send_clicked, this, &MainWindow::slotSendDatagram(int_enoverport)); // otpravka датаграмму
connect(m_pudp, &QUdpSocket::readyRead, this, &MainWindow::slotProcessDatagrams);
connect(m_pudp, SIGNAL(error(QAbstractSocket::SocketError)),this, SLOT(slotError(QAbstractSocket::SocketError)));
}
QString MainWindow::string_no_probel(QString &str)
{
int n = str.size() - 1;
for ( ; n >= 0; -- n){
if (str.at(n) == ' ' )
str.remove(n, 1 );
}
return str;
}
void MainWindow::slotSendDatagram(int port_udp)
{
QByteArray baDatagram;
QDataStream out(&baDatagram, QIODevice::WriteOnly);
out.setVersion(QDataStream::Qt_5_3);
// QString otpravka = "я: " + ui->lE_localport->text();
ui->textBrowser->append("я: " + ui->lE_message->text());
out << ui->lE_message->text();
ui->lE_message->clear(); //pobolansi imi
m_pudp->writeDatagram(baDatagram, QHostAddress::LocalHost, port_udp);
}
void MainWindow::on_pB_send_clicked()
{
}
void MainWindow::slotProcessDatagrams()
{
QByteArray baDatagram;
do {
baDatagram.resize(m_pudp->pendingDatagramSize());
m_pudp->readDatagram(baDatagram.data(), baDatagram.size());
} while(m_pudp->hasPendingDatagrams());
QDataStream in(&baDatagram, QIODevice::ReadOnly);
in.setVersion(QDataStream::Qt_5_3);
QString str_priem;
in >> str_priem;
ui->textBrowser->append("принятое :" + str_priem);
}
вывод
20:36:24: Запускается /home/comp/dima/Qt/udipiclientserver/udipiclientserver ...
qt.core.qobject.connect: QObject::connect: No such signal QUdpSocket::ui->pB_open->clicked()
qt.core.qobject.connect: QObject::connect: (receiver name: 'MainWindow')
qt.core.qobject.connect: QObject::connect: No such signal QUdpSocket::error(QAbstractSocket::SocketError)
qt.core.qobject.connect: QObject::connect: (receiver name: 'MainWindow')
Ответы (1 шт):
Автор решения: timob256
→ Ссылка
Спасибо @Fat-Zer
вот код :
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QUdpSocket>
#include <QAbstractSocket>
#include <QHostAddress>
//#include <QRegExpValidator> not work in ubuntu 20 ;_;
#include <QValidator>
#include <QIntValidator>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
QString string_no_probel(QString &str);
// юдипи сокеты
QUdpSocket* m_pudp;
int int_enoverport;
int int_localport;
private:
Ui::MainWindow *ui;
private slots:
void on_pB_open_clicked();
void slotSendDatagram(int port_udp);
void slotProcessDatagrams();
// signals:
// void on_pB_send_clicked();
void on_pB_send_clicked();
void on_pB_close_clicked();
};
#endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
int_enoverport = 0;
int_localport = 0;
ui->setupUi(this);
ui->lE_enoverport->setValidator(new QIntValidator(ui->lE_enoverport));
ui->lE_localport->setValidator(new QIntValidator(ui->lE_localport));
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pB_open_clicked()
{
// локальный порт
QString str_localport = ui->lE_localport->text();
string_no_probel(str_localport);
int_localport = str_localport.toInt();
// удалённый порт
QString str_enoverport = ui->lE_enoverport->text();
string_no_probel(str_enoverport);
int_enoverport = str_enoverport.toInt();
m_pudp = new QUdpSocket(this);
m_pudp->bind(QHostAddress::LocalHost, int_localport);
connect(m_pudp, SIGNAL(readyRead()), this, SLOT(slotProcessDatagrams()));
connect(m_pudp, SIGNAL(disconnected()), m_pudp, SLOT(deleteLater()));
}
QString MainWindow::string_no_probel(QString &str)
{
int n = str.size() - 1;
for ( ; n >= 0; -- n){
if (str.at(n) == ' ' )
str.remove(n, 1 );
}
return str;
}
void MainWindow::slotSendDatagram(int port_udp)
{
QByteArray baDatagram;
QDataStream out(&baDatagram, QIODevice::WriteOnly);
out.setVersion(QDataStream::Qt_5_3);
// QString otpravka = "я: " + ui->lE_localport->text();
ui->textBrowser->append("я: " + ui->lE_message->text());
out << ui->lE_message->text();
ui->lE_message->clear(); //pobolansi imi
m_pudp->writeDatagram(baDatagram, QHostAddress::LocalHost, port_udp);
}
void MainWindow::on_pB_send_clicked()
{
slotSendDatagram(int_enoverport);
}
void MainWindow::slotProcessDatagrams()
{
QByteArray baDatagram;
do {
baDatagram.resize(m_pudp->pendingDatagramSize());
m_pudp->readDatagram(baDatagram.data(), baDatagram.size());
} while(m_pudp->hasPendingDatagrams());
QDataStream in(&baDatagram, QIODevice::ReadOnly);
in.setVersion(QDataStream::Qt_5_3);
QString str_priem;
in >> str_priem;
ui->textBrowser->append("принятое :" + str_priem);
}
void MainWindow::on_pB_close_clicked()
{
m_pudp->close();
}