Seite 1 von 1

Probleme mit QLineEdit

Verfasst: 15. Juli 2006 17:03
von stockfisch
Hallo Mädls und Jungs,

ich bin ziemlich neu in der QT Programmierung, also nicht lachen :oops:

Ich schreibe gerade an einem kleinen Testtool, mit dem ich einen zusammengesetzten String über eine Schnittstelle verschicken möchte, der diese dann empfängt und weiterverarbeitet. Prinzipiell funktioniert dass schon ganz gut.
Mein Problem ist folgendes, ich habe im GUI ein paar QLineEdit Felder, aus denen der zu versendende String zusammengbastelt wird. Beim Druck auf einen Button wird dann das Versenden angestossen.
Die Slot-Funktion wird auch brav aufgerufen, ich kann den Inhalt des QLineEdit Feldes mit text() auslesen .. alles pippifein ..
1. Problem: es wird nur der Text, den ich testweise im Konstruktor meines 'mainWidgets' reingeschrieben hab auslesen, wenn ich nachträglich einfach was anders eingebe wird das ignoriert -> text() gibt immer den ursprünglichen Text zurück.
2. Problem: wenn ich in der Funktion den Text lösche (also clear() aufrufe) passiert dies zwar (also text().length() gibt 0 zurück) aber in GUI ist davon nichts zu sehn. Genauso verhält es sich, wenn ich mittels setText(String) was reinschreiben, im GUI passiert nix, aber die Feldlänge wird geändert.

meine SlotFunktiion mit einwenig sinnlosen DebugCode.

zur Erklärung: mein MainWidget ist die Klasse lvs_main.

Code: Alles auswählen

    256 void comm::t_rpcexe() {
    257   rpc * ser = new rpc("RPCSER", "NOWAIT");   
    258   lvs_main amw; 
    259   if ( ser->do_rpcini() )
    260     if ( ( ser->do_rpcexe("700120060213120326594558        BDH3QSW UT      9-1  -1  -1") ) ) {
    261     // TODO: Telegramm muss aus GUI kommen -> Strings zambasteln
    262       cout << "rpcexe Tgm verschickt\n";
    263     } else {
    264       cout << "rpcexe fehlgeschlagen\n";
    265     }
    266     cout << "lineedit 1 text: \t" << amw.lineEdit1->text() << "\n";
    267     QString *text = new QString("1234");
    268     cout << "le text length \t " << amw.lineEdit1->text().length() << "\n" ;
    269     amw.lineEdit1->clear();
    270     cout << "le text length \t " << amw.lineEdit1->text().length() << "\n";
    271     amw.lineEdit1->setText( *text );
    272     cout << "le text length \t " << amw.lineEdit1->text().length() << "\n";
    273     ser->do_rpccls();
    274     delete ser;
    275
    276 } // t_rpcexe

Ich glaub es ist eh einfach nur ein seh triviales Problem, aber ich seh langsam den Wald vor lauter Bäumen nicht mehr und wüsste eigentlich ganz was anders an so einem schönen Sommertag zu tun ;-)

Verfasst: 15. Juli 2006 17:46
von upsala
So wie ich das sehe legst du in deiner Funktion ein neues MainWidget an, stellst es aber nicht dar. Und mit dessen LineEdit arbeitest du dann. Versuch mal an das Orginal-MainWidget ranzukommen, und mit dem zu arbeiten.

Verfasst: 15. Juli 2006 19:41
von stockfisch
stimmt, danke für den Tip .. bin ein Esel :-) Jetzt hab ich nur noch das Problem, dass ich der t_rpcexe Funktion nicht so einfach das Objekt vom MainWidget übergeben kann; also beim connect im Konstruktor 'lebt' es ja selbst noch nicht. Jetzt hätt ich das connect in eine eigene Funktion ausgelagert, die nach dem Aufruf vom Konstruktor aufgerufen wird, jetzt bekomme ich ganz eine komische Fehlermeldung

g++ -c -m32 -pipe -O2 -fmessage-length=0 -O2 -fmessage-length=0 -DQT_NO_DEBUG -DQT_SHARED -DQT_TABLET_SUPPORT -DQT_THREAD_SUPPORT -I/usr/lib/qt3/mkspecs/default -I. -I/usr/include -I/usr/lib/qt3/include -o moc_comm.o moc_comm.cpp
/usr/lib/qt3/include/qmainwindow.h: In copy constructor `lvs_main::lvs_main(const lvs_main&)':
/usr/lib/qt3/include/qmainwindow.h:203: error: `QMainWindow::QMainWindow(const QMainWindow&)' is private
moc_comm.cpp:87: error: within this context

und der entsprechende Code-Bereich ist:

Code: Alles auswählen

    84 bool comm::qt_invoke( int _id, QUObject* _o )
     85 {
     86     switch ( _id - staticMetaObject()->slotOffset() ) {
     87     case 0: t_rpcexe((lvs_main)(*((lvs_main*)static_QUType_ptr.get(_o+1)))); break;
     88     case 1: t_rpccls(); break;
     89     default:
     90   return QObject::qt_invoke( _id, _o );
     91     }
     92     return TRUE;
     93 }
ich verzweifle :-/

Verfasst: 15. Juli 2006 19:56
von upsala
Da steht es doch:
QMainWindow::QMainWindow(const QMainWindow&)' is private
Übergib das QMainWindow als Pointer oder Referenz. Kopien machen keinen Sinn und sind deswegen nicht möglich

Verfasst: 18. Juli 2006 22:52
von stockfisch
Hi upsala,

Danke für dein Hilfe, war einfach schon total verzweifelt und ein wenig übernachtig bzw. etwas verärgert (nicht über QT im Allgemeinen .. )
Mittlerweile hab ich mein Problem (und noch ein paar andere) lösen können.