qt-Programm: QLineEdit mit QPushButton auslesen funktioniert nicht, warum?
Hallo, ich versuche im 2 Fenster 2 des unteren Proggis Text der unteren QLineEdit nach oben zu übernehmen (mit testen ()), stürzt ab und wird oben(QlineEdit) nicht angezeigt . Warum klappt es nicht, bin Neuling in QT? Hier Counter.h: #include QLineEdit #include QPushButton #include QDialog
class Counter : public QLineEdit
{
Q_OBJECT // Enable signals and slots
public:
Counter (QWidget *parent=0);
~Counter();
QPushButton *cl, *plus;
QWidget *fen;
public slots:
void countUp();
void testen();
void MeinFenster();
private:
char zahlwort[200];
Counter *gf, *hf;
int n;
QString zahli;
};
hier Counter.cpp
#include "counter.h"
Counter::Counter (QWidget *parent)
: QLineEdit (parent),
n(0){}
Counter::~Counter() {}
void Counter :: MeinFenster() //QWidget parent)
{
fen = new QWidget();
fen->setGeometry(100,200,300,200);
fen->show();
gf = new Counter(fen); // Eigentlich als Eingabe gedacht
gf->setGeometry(10,10,100,20);
gf->show();
hf = new Counter(fen); // Als Ausgabe der Berechnungen gedacht
hf->setGeometry(10,50,100,20);
hf->show();
hf->setText(zahli);
cl = new QPushButton("test", fen);
cl->setGeometry(50,120,95,20);
cl->show();
plus = new QPushButton("plus", fen);
plus->setGeometry(50,150,95,20);
plus->show();
QObject::connect(cl, SIGNAL (clicked()), gf, SLOT(testen()));
QObject::connect(plus, SIGNAL (clicked()), hf, SLOT(countUp()));
}
void Counter::countUp ()
{
zahli = text();
n = zahli.toInt();
n++;
zahli.setNum(n);
setText(zahli);
}
void Counter :: testen()
{
zahli = hf->text();
setText(zahli);
}
Counter::Counter (QWidget *parent)
: QLineEdit (parent),
n(0){}
Counter::~Counter() {}
void Counter :: MeinFenster() //QWidget parent)
{
fen = new QWidget();
fen->setGeometry(100,200,300,200);
fen->show();
gf = new Counter(fen); // Eigentlich als Eingabe gedacht
gf->setGeometry(10,10,100,20);
gf->show();
hf = new Counter(fen); // Als Ausgabe der Berechnungen gedacht
hf->setGeometry(10,50,100,20);
hf->show();
hf->setText(zahli);
cl = new QPushButton("test", fen);
cl->setGeometry(50,120,95,20);
cl->show();
plus = new QPushButton("plus", fen);
plus->setGeometry(50,150,95,20);
plus->show();
QObject::connect(cl, SIGNAL (clicked()), gf, SLOT(testen()));
QObject::connect(plus, SIGNAL (clicked()), hf, SLOT(countUp()));
}
void Counter::countUp ()
{
zahli = text();
n = zahli.toInt();
n++;
zahli.setNum(n);
setText(zahli);
}
void Counter :: testen()
{
zahli = hf->text();
setText(zahli);
}
soll hf->text() heißen main.cpp = okay. Kann nicht auf Text der anderen mit Counter gesetzten QLineEdit-Elemente zurückgreifen. CountUp= ok.. Wird ohne Fehler / Warnmeldungen compiliert. Aber wenn ich versuche mit testen gf->text auf den Text vom Element gf zurückzugreifen will, stürzt das Prog ab. setText("hallo") wird angezeigt warum? Falsche Klasse oder was?
3 Antworten
Hallo, der Aufbau des User-Interfaces ist sehr "krass" , aber, um es genau erkären zu können solltest du noch den Inhalt der main() mit dazuschreiben.
Habs mit allen Versionen von Zeiger-Aufrufen probiert. Bis Weihnachten gib ich mir Zeit. Wenns dann nicht funzt, hör ich mit qt auf und bleib bei c und c++. Mit 50 Jahren auf dem Buckel muß ich mir nichts mehr beweisen und hab was anderes zu tun als ständig aufm Rechner rumzudödeln.
Hallo,
am besten schick den ganzen source-code an kaiAbuSir at gmx.de damit nichts verloren geht.
Und: Wenn im Debug-Fenster die message kommt ...no such slot...,
dann hat man meist eine schreibfehler gemacht, oder die falschen paramter angegeben (z.b. mySlot(int) stall mySlot(int &) )
Hallo, der source code kann so nicht stimmen: ... = new MeinFenster(); //geht nicht: Denn es gibt ja gar keine Klasse "MeinFenster" sondern MeinFenster() ist ein Methode von Counter. (Außderdem fehlen ein paar Sternchen *, die sind aber wohl vom Editor verschluckt worden, kein Problem)
Richtig der Editor hat da selbst im Source-Code-Modus einiges verschluckt. Mit geht es um die Parameterübergabe bei den Funktionen die auf QLineEdit. Selbst wenn ich diese in der Klassendeklaration als public angebe, geht es nicht. Ich möchte innerhalb der Methode testen auf *gf und * zurückgreifen können.
Wenn ich das Prog laufen lasse, kommt nur eine Fehlermeldung:
no such Slot.
Den Code für eine Parameterübergabe wie folgt:
void Counter :: testen\
( hier Parameter für QlineEdit-zugriff ) { zahli = hf->text(); setText(zahli); }
wüßte ich gerne, wie geht das?
Hab das ganze jetzt mit dem QT-Designer gemacht. ausserdem mit
gf -> setText(QString("%1").arg(sinus,0,'f',7));
jetzt klappt es. Der moderne QT-Creator rechnet die ui-Dateien dazu. Deswegen hat es mit dem alten code nicht geklappt.
Für den ganzen Source-code reichte derPlatz im Editor von gutefrage.net nicht.
hier der Rest:
#include <QApplication>
#include <QWidget>
#include <QPushButton>
#include <QLineEdit>
#include "counter.h"
int main(int argc, char argv[])
{
int zahl = 33;
QString zawo;
QString wort = "123";
//QString dummy = "";
QString test = "Test";
QApplication app(argc, argv);
QWidget fenster = new QWidget();
fenster->setWindowTitle("Hallo 6");
fenster->setGeometry(300,200,300,200);
QLineEdit e = new QLineEdit(fenster);
e->setGeometry(10,10,150,20);
e->setText(wort);
QLineEdit erge = new QLineEdit(fenster);
erge->setGeometry(10,50,150,20);
MeinFenster mf = new MeinFenster();
mf->setGeometry(50,100,200,200);
mf->show();
wort = e->text();
zahl = wort.toInt();
zahl +=2;
zawo.setNum(zahl);
erge->setText(zawo);
QPushButton clear = new QPushButton("Clear", fenster);
clear->setGeometry(50,120,95,20);
QPushButton finito = new QPushButton("exit", fenster);
finito->setGeometry(150,120,95,20);
fenster->show();
Counter z = new Counter(fenster);
z->setGeometry(10,80,95,20);
z->show();
// Wollte zuert alles im Hauptfenster machen, aber nichts ausser countUp klappt????
QObject::connect(clear, SIGNAL (clicked()), z, SLOT ( countUp() ) );
QObject::connect(finito, SIGNAL (clicked()), &app, SLOT ( quit() ) );
return app.exec();
}