Seite 1 von 1

Brauche Hilfe bei Slots

Verfasst: 4. September 2006 15:03
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();
    }

Verfasst: 4. September 2006 15:39
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

Verfasst: 4. September 2006 16:25
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]

Verfasst: 4. September 2006 16:34
von Christian81
Nochmal: 'Man kann keine Werte bei den connects übergeben' !

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

Verfasst: 4. September 2006 16:49
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