Seite 1 von 1
[gelöst] prüfen, ob widget existiert
Verfasst: 26. November 2007 22:38
von Linuxguru
hallo,
kann ich rausfinden, ob ein widget existiert?
ich brauch das für ein textedit. ich darf erst auf die signale zugreifen können, wenn das objekt existiert.
etwa so
Code: Alles auswählen
if( edit->exists() )
{
connect( edit->document(), SIGNAL(contentsChange(int,int,int)), this, SLOT(textChanged(int,int,int)) );
connect( edit, SIGNAL(cursorPositionChanged()), this, SLOT(sliderPosition1()) );
connect( edit->verticalScrollBar(), SIGNAL(valueChanged(int)), this, SLOT(sliderPosition(int)) );
}
Danke
Verfasst: 26. November 2007 22:42
von Burgpflanze
Verfasst: 26. November 2007 22:52
von Linuxguru
danke für deine antwort.
leider kann ich edit nicht abfragen, wenn es nicht existiert. da bekomm ich ein speicherzugriffsfehler. gibt es noch eine andere möglichkeit?
danke
Verfasst: 26. November 2007 23:05
von dhcase
dann hat du edit nicht mit 0 initialisiert...
Verfasst: 26. November 2007 23:44
von Linuxguru
hallo,
mein kopf der main loop sieht so aus
Code: Alles auswählen
MyWidget::MyWidget(QWidget *parent)
: QWidget(parent), edit(0), ftp(0)
{
if( edit !=0 )
{
connect( edit->document(), SIGNAL(contentsChange(int,int,int)), this, SLOT(textChanged(int,int,int)) );
connect( edit, SIGNAL(cursorPositionChanged()), this, SLOT(sliderPosition1()) );
connect( edit->verticalScrollBar(), SIGNAL(valueChanged(int)), this, SLOT(sliderPosition(int)) );
}
}
in meiner fileNew() funktion weiter unten wird dann mein qtextedit mit
erstellt und in ein layout hinzugefügt, was ein tabwidget enthält.
kann mir jemand weiterhelfen?
Verfasst: 27. November 2007 08:05
von Korgen
Linuxguru hat geschrieben:
mein kopf der main loop sieht so aus
Was meinst du mit main loop, das ist doch eher ein Konstruktor der Klasse MyWidget?
Code: Alles auswählen
MyWidget::MyWidget(QWidget *parent)
: QWidget(parent), edit(0), ftp(0)
{
if( edit !=0 )
{
connect( edit->document(), SIGNAL(contentsChange(int,int,int)), this, SLOT(textChanged(int,int,int)) );
connect( edit, SIGNAL(cursorPositionChanged()), this, SLOT(sliderPosition1()) );
connect( edit->verticalScrollBar(), SIGNAL(valueChanged(int)), this, SLOT(sliderPosition(int)) );
}
}
Nach dem Aufruf des Konstruktors, wird edit immer 0 sein, da du es ja in der Initialisierungsliste auf 0 setzt.
in meiner fileNew() funktion weiter unten wird dann mein qtextedit mit
Wenn du edit hier neu anlegst, bringt das für deine Signals und Slots nichts, da der Konstruktor(s.o.) ja schon längst durchlaufen ist und somit auch das connect nicht mehr ausgeführt wird.
Vorschlag:
eine Methode void connectSignalsAndSlots(), die folgerdermaßen aussieht:
Code: Alles auswählen
void MyWidget::connectSignalsAndSlots()
{
if ( edit )
{
//CONNECTS
}
}
diese Methode dann einfach nach der Erzeugung von edit aufrufen.
Grüße
Verfasst: 29. November 2007 22:47
von Linuxguru
hallo korgen,
deine lösungsansatz konnte ich leider nicht verwenden, das ja dann die slots nur aufgerufen werden, wenn die funktion ausgeführt wird.
hab aber jetzt im forum eine qtextedit klasse gefunden, was die zeilennummern per painterevent zeichnet.
danke allen für die hilfe