2015-09-01 4 views
0

Я хочу передать данные из одной формы в другую. Я провел некоторое исследование, и я узнал, как это сделать, но мой код не работает!
Вот мой код:передавать данные из одного класса в другой qt

mainwindow.h

signals: 
    void signalEmission(const String &port) ; 

mainwindow.cpp

void MainWindow::on_pushButtonclicked() 
{ 

    emit signalEmission(nameArea->toPlainText()) ; 

} 

class.h

private slots: 
    void mySlot(const QString &port) ; 

class.cpp

void class::mySlot(const QString &port) 
{ 
    messages->append(port) ; 
} 

main.cpp

MainWindow h ; 
    class c; 

QObject::connect(&h,SIGNAL(signalEmission(const QString&)),&c,SLOT(research(const QString&))) ; 

Я не получить номер порта из класса MainWindow !! Может кто-то помочь.


EDIT: Вот мой код

history.h

#ifndef HISTORY_H 
#define HISTORY_H 

#include <QMainWindow> 
#include <ui_history.h> 
#include <QTcpSocket> 

class History : public QMainWindow, private Ui::History 
{ 
    Q_OBJECT 

public: 
    explicit History(); 

private slots: 
    void on_searchButton_clicked(); 
signals: 
     void signalEmission(QString port) ; 

}; 

#endif // HISTORY_H 

history.cpp

#include "history.h" 
#include "ui_history.h" 
#include "client.h" 
#include "ui_client.h" 
#include <QDebug> 
#include <QtNetwork> 

History::History() { 

    setupUi(this); 
    resize(500,200); 
    move(300,300) ; 

} 


void History::on_searchButton_clicked() 
{ 

    emit this->signalEmission(receiverPort->toPlainText()) ; 

    this->close() ; 
} 

client.h

#ifndef HEADER_CLIENT 
#define HEADER_CLIENT 

#include <QMainWindow> 
#include <QtWidgets> 
#include <QtNetwork> 
#include <QSqlDatabase> 
#include "history.h" 
#include "ui_client.h" 

class client : public QMainWindow, private Ui::client 
{ 
    Q_OBJECT 

    public: 
    explicit client(); 

    public slots: 
     void on_connexionButton_clicked(); 
     void on_sendButton_clicked(); 
     void receivedData(); 
     void connectClient(); 
     void disconnect(); 
     void socketError(QAbstractSocket::SocketError erreur); 

     void on_disconnexionButton_clicked(); 
     void on_connectedClientsButton_clicked(); 
     void on_refreshButton_clicked(); 

     void on_historyButton_clicked(); 
     void research(QString port) ; 




private slots: 
     void on_clearButton_clicked(); 

     void on_connectedList_pressed(); 

private: 
     QTcpSocket *socket; // Représente le serveur 
     quint16 messageLength; 

     History *his; 
     QSqlDatabase db ; 
     QStringList *cc ; 
     QStringListModel *ccl ; 
     QString selectedTexts ; 


}; 

#endif 

client.cpp

#include "client.h" 
#include "history.h" 
#include "ui_history.h" 
#include "ui_client.h" 
#include <QMainWindow> 
#include <QSqlDatabase> 
#include <QSqlError> 
#include <QSqlQuery> 
#include <QDebug> 

client::client() 
{ 
     setupUi(this); 

     cc = new QStringList(); 
     ccl = new QStringListModel() ; 


     socket = new QTcpSocket(this); 
     connect(socket, SIGNAL(readyRead()), this, SLOT(receivedData())); 
     connect(socket, SIGNAL(connected()), this, SLOT(connectClient())); 
     connect(socket, SIGNAL(disconnected()), this, SLOT(disconnect())); 
     connect(socket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(socketError(QAbstractSocket::SocketError))); 

     messageLength = 0; 

     disconnexionButton->setEnabled(false); 
     connectedClientsButton->setEnabled(false); 
     sendButton->setEnabled(false); 
     clearButton->setEnabled(false); 
     refreshButton->setEnabled(false); 
     historyButton->setEnabled(false); 
} 

void client::research(QString port){ 


    qDebug() << port ; 


    //messagesList->cleanHistory() ; 
    /* QSqlQuery qry(db); 
    qry.prepare("SELECT * FROM conversations where sender=? and receiver=?"); 
    qry.addBindValue(socket->localPort()) ; 
    qry.addBindValue(port) ; 
    if(!qry.exec()){ 
     qDebug() << "Problem with Select conversation" ; 
    } 
    else{ 
     qDebug() << "Select conversation query executed successfully" ; 
    } 

    messagesList->append(tr("<strong>Historique des conversations:</strong>")) ; 
    while(qry.next()) 
     { 
     messagesList->append(qry.value(2).toString()+" "+qry.value(3).toString()) ; 
     }*/ 


} 

Может кто-то пожалуйста, скажите мне, что случилось. Это сводит меня с ума!!

+4

Что такое 'String' в сигнале' void signalEmission (const String & port) '? Разве это не должно быть 'QString'? –

+1

Вам нужно подключиться к 'SLOT (mySlot (const QString &))' вместо 'SLOT (research (const QString &))'. – vahancho

+0

Да, я уже получил их правильно в своем коде. Это не проблема. Я не получаю никаких ошибок. Слот mySlot не выполняется, когда сигнал signalEmission испускается из MainWindow.cpp. –

ответ

0

Здесь очень много проблем, глядя на комментарии, этот код, похоже, не является реальным кодом ...? лучше разместить реальный код, а затем отправить пример с очень сложной ошибкой - это смутит людей, пытающихся помочь вам.

Во всяком случае, несколько вещей, чтобы попытаться помочь вам:

  1. Ваш класс «класс» на самом деле называется «класс» ?, это ключевое слово уже, так что я бы переименовать, что у меня есть не знаю, что сделает компилятор: o
  2. Убедитесь, что все сигнатуры функций идентичны для ваших слотов и сигналов, т. е. все они принимают «const QString &».
  3. Проверьте правильность значения возврата соединения (ok), а не false (не удалось): if (!QObject::connect(...)) {printf("Connection failed!\n");}.Если его ложь, то что-то не так.
  4. Попробуйте простой запуск точки, то есть сделать слот и сигнал, что взять QString, что: void MainWindow::on_pushButtonclicked() { emit signalEmission((QString) "test"); }

наконец, пожалуйста, покажите любые ошибки/предупреждения от компиляции и из результатов отладки.

+0

Спасибо за ваш совет. Данные, которые я хочу передать через сигнал, на самом деле являются номером порта, который я получаю из QTextEdit с QTextEditObjectName-> toPlainText(). Является ли этот тип (cont Qstring &)? –

+0

@DouaeHaddad Ну, его просто QString, функция 'QString toPlainText() const', const в этом случае означает, что она является функцией const и не изменяет никаких переменных-членов, но тип возвращаемого значения - это просто QString. То, что я имел в виду, это попытаться сначала отправить тестовую строку, чтобы заставить ваш механизм работать, а затем начать передавать реальные значения после того, как вы его заработаете. –

+0

Хорошо спасибо, я попробую. –