[gelöst] prüfen, ob widget existiert

Alles rund um die Programmierung mit Qt
Antworten
Linuxguru
Beiträge: 96
Registriert: 14. Januar 2007 02:09

[gelöst] prüfen, ob widget existiert

Beitrag 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
Zuletzt geändert von Linuxguru am 29. November 2007 22:47, insgesamt 2-mal geändert.
Burgpflanze
Beiträge: 89
Registriert: 24. Februar 2006 16:41
Wohnort: Dresden

Beitrag von Burgpflanze »

Eventuell

Code: Alles auswählen

if (edit)
{
   ...
}
Gruß, Peter
Linuxguru
Beiträge: 96
Registriert: 14. Januar 2007 02:09

Beitrag 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
dhcase
Beiträge: 132
Registriert: 10. Juni 2006 20:38

Beitrag von dhcase »

dann hat du edit nicht mit 0 initialisiert...
Linuxguru
Beiträge: 96
Registriert: 14. Januar 2007 02:09

Beitrag 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

Code: Alles auswählen

    edit= new QTextEdit;
erstellt und in ein layout hinzugefügt, was ein tabwidget enthält.

kann mir jemand weiterhelfen?
Korgen
Beiträge: 42
Registriert: 28. März 2006 16:37

Beitrag 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

Code: Alles auswählen

    edit= new QTextEdit;
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
Linuxguru
Beiträge: 96
Registriert: 14. Januar 2007 02:09

Beitrag 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
Antworten