Unsolved can not call function of different class
-
connection.h
#ifndef CONNECTION_H #define CONNECTION_H #include <QDialog> #include<QTcpSocket> #include"mainwindow.h" #include"formclient.h" namespace Ui { class connection; } class MainWindow; class connection : public QDialog { Q_OBJECT public: explicit connection(QWidget *parent = 0); ~connection(); QTcpSocket *m_pclientsocket; void send_MsgToServer(QString msg); private slots: void Read(); void displayError(QAbstractSocket::SocketError socketerror); void on_pushButton_connect_clicked(); void on_pushButton_send_clicked(); private: Ui::connection *ui; MainWindow *m; }; #endif // CONNECTION_H
connection.cpp
#include "connection.h" #include "ui_connection.h" #include<QMessageBox> connection::connection(QWidget *parent) : QDialog(parent), ui(new Ui::connection) { ui->setupUi(this); } void connection::send_MsgToServer(QString msg) { qDebug()<<"in sendmsgserver"<<m_pclientsocket; m_pclientsocket->write(msg.toStdString().c_str()); qDebug()<<"message sended "<<msg; }
formclient.h
#ifndef FORMCLIENT_H #define FORMCLIENT_H #include <QWidget> #include"mydelegate.h" #include"mainwindow.h" #include"connection.h" #include<QString> namespace Ui { class FormClient; } class mydelegate; class connection; class FormClient : public QWidget { Q_OBJECT public: explicit FormClient( QString name,QWidget *parent = 0); ~FormClient(); signals: void sendmsg(QString msg); public slots: void on_pushButton_send_clicked(); private: Ui::FormClient *ui; mydelegate *delegate; connection *mw; QString C_name; }; #endif // FORMCLIENT_H
formclient.cpp
FormClient::FormClient(QString name, QWidget *parent) : QWidget(parent), ui(new Ui::FormClient) { ui->setupUi(this); delegate=new mydelegate(this); mw=new connection(this); C_name=name; ui->label_clientname->setText(C_name); } FormClient::~FormClient() { delete ui; } void FormClient::on_pushButton_send_clicked() { QString s = ui->textEdit_message->toPlainText().trimmed(); QString send=C_name+":"+s; qDebug()<<s<<" "<<send; mw->send_MsgToServer(send); "<- not working" }
mw->send_MsgToServer(send); is not getting executed. It is may be issue of object "mw".But i dont know what exactly it is.
-
Did you do a rerun of qmake and a rebuild?
Your project might be ouit of sync.
Otherwise the best is touse the debugger and set a break point there.
Possibly you should have received a warning for the connect not possible.
-
-
@JadeN001
You have severalqDebug()
messages, including 2 insend_MsgToServer()
. Do you think it would help us if you told us which ones produced any output (or state that none did), or would you like us to guess? -
@JonB none of the qDebug() of send_MsgToServer() function works. I mean send_MsgToServer() is not getting called.
And formclient() is called from delegate's create editor().Is there amy connection with issue? -
@JadeN001
OK, so you do get theqDebug()
inon_pushButton_send_clicked()
but not the first one even insend_MsgToServer()
, right? -
If you are trying to do an auto-connect through Qt, there might be the parameter missing [see here](lhttps://doc.qt.io/qt-5/qabstractbutton.html#clicked .
Therefore, my hint that you might have received a warning on that.
Also when a program crashes under certain circumstances it is helpful to use the debugger.
-
@JonB yeah. because send_MsgToServer() is getting called.
-
@JadeN001
Do you have access to and know how to use a debugger, because that's what I would use? -
-
@JadeN001 You should really learn to use a debugger. A debugger is one of the most important tools a programmer should use :-)
-
@JadeN001
As @jsulm has just said, learning to use a debugger will in the long-run be the best time you spent! Just do it soon.In the meantime, in
on_pushButton_send_clicked()
just before you try to callmw->send_MsgToServer(send);
I'd put in some moreqDebug()
statements which show some of the properties of yourconnection
object viamw->...
. You're looking to just verify thatmw
is indeed still pointing at some validconnection
, just in case..... -
@JonB @jsulm yeah I really appreciate your suggestion. I will start.
I have checked Value of object "mw" by qDebug(). and It returns proper object value.
something like this :object : connection(0x201c0350, name="connection")
I thought that might be the issue is ,the object was not being generated properly.But i was wrong.
-
@JadeN001
Assuming it really is as you say, and you really have rebuilt your code etc., and you are compiling for/viewing debug, and it's not crashing, it's going to be pretty hard to answer how the linemw->send_MsgToServer(send)
could simply "not get executed", without a debugger....One last thing I can think of, just in case. Your first line in
send_MsgToServer()
is:qDebug()<<"in sendmsgserver"<<m_pclientsocket;
Just in case there's some problem serializing
m_pclientsocket
, temporarily change it to plain:qDebug()<<"in sendmsgserver"
(I don't think there actually will have been an issue because I think you're only trying to print out the pointer here, but it's worth a try...)
-
@JonB yeah u r right. Here is problem in m_pClientsocket. Thank you for direct me. now, I am trying to solve socket problem
-
I have define m_pClientsocket in constructor of class
but it failed to access in send_MsgToServer().
because ,If I define in constuctor then when formclient class define the object on connection classFormClient::FormClient(QString name, QWidget *parent) : QWidget(parent), ui(new Ui::FormClient) { ui->setupUi(this); delegate=new mydelegate(this); mw=new connection(this); }
At that time value of socket is getting changed.
So the changes it bu moving them_pclientsocket= new QTcpSocket(this);
in to another main function.
void connection::on_pushButton_connect_clicked() { m_pclientsocket= new QTcpSocket(this); ui->textEdit_Sendname->clear(); m_pclientsocket->connectToHost(ui->textEdit_IP->toPlainText(),quint16(ui->textEdit_Port->toPlainText().toInt())); if(m_pclientsocket->waitForConnected(1000)){ qDebug()<<"connected"<<m_pclientsocket; ui->label_connection->setText("Connected to Server"); } }
send_MsgToServer() can not access it . where i am wrong.? what could be solution?
-
In send_MsgToServer(). the ans of
void connection::send_MsgToServer(QString msg) { qDebug()<<"in sendmsgserver"<<m_pclientsocket; m_pclientsocket->write(msg.toStdString().c_str()); qDebug()<<"message sended "<<msg; }
in sendmsgserver QApplication(0x22fe28) QIODevice::write (QApplication): device not open
what it is indicating? How can be value of socket be like QApplication.
-
Hi,
Why are you creating a new
QTcpSocket
each time you callon_pushButton_connect_clicked
? -
And why are you using
waitForConnected
?this cannot work. use signals&slots!
regards
-
@SGaist because the Problem i am facing :
if I called new QTcpSocket from constructor,thenFormClient::FormClient(QString name, QWidget *parent) : QWidget(parent), ui(new Ui::FormClient) { ui->setupUi(this); delegate=new mydelegate(this); mw=new connection(this); }
this class create QTcpSocket evety time when mw=new connection(this); called.
because of that the void connection::send_MsgToServer(QString msg)
get different value of QTcpsocket.