signals and slots are not working
-
Hello, signals and slots are not working.
What am I doing wrong ??
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_NAMESPACEclass MainWindow : public QMainWindow
{
Q_OBJECTpublic:
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') -
Hi,
Your two connect statements are wrong.
QUdpSocket has an errorOccured signal now.
As for the button signal error, the source object is wrong and the SIGNAL content is wrong as well.
You should move all your connection code to the new syntax. You'll get compile time error.
-
Please re-read https://doc.qt.io/qt-5/signalsandslots.html to fix your connections
And you should switch over the new signal/slot syntax -
Hi,
Your two connect statements are wrong.
QUdpSocket has an errorOccured signal now.
As for the button signal error, the source object is wrong and the SIGNAL content is wrong as well.
You should move all your connection code to the new syntax. You'll get compile time error.
-
Hello, signals and slots are not working.
What am I doing wrong ??
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_NAMESPACEclass MainWindow : public QMainWindow
{
Q_OBJECTpublic:
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')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_Hmainwindow.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(); }