Brauche Hilfe bei Slots

Alles rund um die Programmierung mit Qt
Antworten
Toni Tornado
Beiträge: 11
Registriert: 4. September 2006 14:05

Brauche Hilfe bei Slots

Beitrag von Toni Tornado »

Hi

bin grade dabei mich in QT einzuarbeiten und hab mir nen sinnloses Progamm geschrieben, das Text aus einem TextEdit Widget in ein anderes TextEdit Widget kopiert.
Wollte damit eigene Slots testen . Aber meine eigenen Slots laufen nicht und ich hab keine Ahnung warum.
hier mein Code

test.h

Code: Alles auswählen

#include <QApplication>
#include <QMainWindow>
#include <QPushButton>
#include <QTextEdit>
#include <QTextStream>
#include <QString>
#include <QObject>

 class haupt : public QMainWindow
 {
 private:
 Q_OBJECT
 public:
 haupt ();
 QString str;
 QString *str_ptr;
  };


 class texte :public QTextEdit
  {
   private:
   Q_OBJECT
   public:
   texte(QString, QWidget*);
   public slots:
   void cp_string(QString *);
   void sh_string(QString *);
    };
test.cpp

Code: Alles auswählen

#include <test.h>

 haupt::haupt()
 {

   setGeometry(20,20,600,600);

   QPushButton *send = new QPushButton(tr("Send"),this);
   QPushButton *receive = new     QPushButton(tr("Receive"),this);
   texte *text = new texte(tr("Hallo"),this);
   texte *text2 = new texte(tr(""),this);
   send->setGeometry(500,50,75,25);
   receive->setGeometry(500,100,75,25);
   text->setGeometry(20,50,75,75);
   text2->setGeometry(20,150,75,75);
   text->cp_string(&str);
   text2->sh_string(&str);
   connect(send,SIGNAL(clicked()),text,SLOT(cp_string(&str)));
   connect(receive,SIGNAL(clicked()),text2,SLOT(sh_string(&str)));
 }
    //        VerboseObject( QObject *parent=0, char *name=0 ) : QObject( parent, name )
texte::texte(QString name, QWidget *parent) : QTextEdit(name , parent)
{
  QTextEdit();

}

void  texte::cp_string(QString *str2_ptr)
{
*str2_ptr=toPlainText();
}

void texte::sh_string(QString *str2_ptr)
{
  setPlainText(*str2_ptr);
}



   int main(int argc, char *argv[])
    {
        QApplication app(argc, argv);
        haupt hp;
        hp.show();
        return app.exec();
    }
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Was soll das hier?

Code: Alles auswählen

connect(send,SIGNAL(clicked()),text,SLOT(cp_string(&str)));
connect(receive,SIGNAL(clicked()),text2,SLOT(sh_string(&str)));
1. man kann dort nichts übergeben
2. und falls man es könnte - woher kommt &str??

Beim Ausführen deines Programms beschert sich Qt auch über diese Fehler - einfach in pro-File
'config += console' einfügen
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Toni Tornado
Beiträge: 11
Registriert: 4. September 2006 14:05

Beitrag von Toni Tornado »

???

ehm
[code]
connect(send,SIGNAL(clicked()),text,SLOT(cp_string(&str)));
[/code]

also der Plan ist, wenn man auf den Button send clicket soll die Funktion cp_string() ausgeführt werden. die soll den Text in text
in nen String kopieren.
&str is die adresse von str und str is nen String [/code]
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Nochmal: 'Man kann keine Werte bei den connects übergeben' !

/edit: Ich empfehle die Lektüre des Qt-Tutorials
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Saiyaman
Beiträge: 111
Registriert: 20. Mai 2005 13:52

Beitrag von Saiyaman »

Die Argumente bei SIGNAL und SLOT müssen 100%ig identisch sein.

Bsp.:

Code: Alles auswählen

connect(obj1, SIGNAL(msgSent(const QString &)), obj2, SLOT(displayMsg(const QString &)));
Wenn obj1 das Signal msgSent(..) emittiert, so wird nun der Slot displayMsg(..) von obj2 aufgerufen. Dieser Slot kann dann genau den Text verarbeiten, der mit dem Signal versendet wurde.

Bsp. für emittieren von eigenen Signalen:

Code: Alles auswählen

emit msgSent ("Verbindung aufgebaut.");
Im Slot steht dann zum Beispiel:

Code: Alles auswählen

void obj2::displayMsg (const QString & msg)
{
   QMessageBox::information(0, "title", msg);
}
Es kann allerdings auch sein, dass man Signale und Slots verbinden kann, wo die Signale keine Argumente haben, und diese bei den Slots dann einfach in der connect-Zeile ignoriert werden. Bin mir da aber eher unsicher. ;)

Code: Alles auswählen

connect(pushBtn, SIGNAL(clicked()), obj2, SLOT(displayMsg()));
Bin mir im Nachhinein sogar ziemlich sicher, dass das NICHT geht. ;)

MfG
Antworten