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.


  • Moderators

    @JadeN001

    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.



  • @koahnig program runs properly. But when function send_MsgToServer called.It stopped working.



  • @JadeN001
    You have several qDebug() messages, including 2 in send_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 the qDebug() in on_pushButton_send_clicked() but not the first one even in send_MsgToServer(), right?


  • Moderators

    @JadeN001

    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?



  • @koahnig @JonB I Don't have that much idea about debugger. Is there any alternative solution ?


  • Moderators

    @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 call mw->send_MsgToServer(send); I'd put in some more qDebug() statements which show some of the properties of your connection object via mw->.... You're looking to just verify that mw is indeed still pointing at some valid connection, 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 line mw->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 class

    FormClient::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 the

        m_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.


  • Lifetime Qt Champion

    Hi,

    Why are you creating a new QTcpSocket each time you call on_pushButton_connect_clicked ?


  • Qt Champions 2017

    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,then

    FormClient::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.



  • @aha_1980 yeah i will correct it.but my problem is still there.


  • Lifetime Qt Champion

    Currently, with the code you provided, it seems you already have an architectural problem.

    Can you describe what you are exactly trying to build ?



  • @SGaist I am creating one QTableview on clientside.when ever client connected,one editor for chatting will create in that tableview.

    0_1530341586271_ju.png

    If want to send message to John from this editor.but when i send message from particular editor the value of QtcpSocket i am getting is somthing like this "

    in sendmsgserver QApplication(0x22fe28)
    QIODevice::write (QApplication): device not open
    

    connection.cpp is class where socket is created.
    formclient.cpp is class of widgets of chatting.



  • Can anyone suggest me , have I worked in a proper way or not?


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.