Problem bei Buttonabfrage

Alles rund um die Programmierung mit Qt
Antworten
littlepeoplegirl79
Beiträge: 30
Registriert: 6. September 2004 17:12

Problem bei Buttonabfrage

Beitrag von littlepeoplegirl79 »

Hallo,

ich gebe ein Videostream an ein Label aus.
Das ganze passiert soweit in einer Schleife, welche durch
den bool-Werte für button-toggled(bool) gesetzt wird.
Jedoch läßt sich diese Schleife nicht mehr anhalten?

Code: Alles auswählen

//im Konstruktor

connect( start_bto, SIGNAL( toggled(bool) ), this, SLOT( frameGrabbing_Slot(bool) ) );

Code: Alles auswählen

void ARBlueBox::frameGrabbing_Slot( bool stop )
{
	while(stop)
	{

		m_frameGrabber.Grab32BitFrame();

		dataPtr = (unsigned char*)m_frameGrabber.GetBuffer();


		if(dataPtr!=0)
		{
			QImage img(frame_xsize, frame_ysize, 32, 0); 

			int idx = 0;
			for (int i = 0; i < frame_ysize; ++i) {
				QRgb *line = (QRgb*)img.scanLine(i);

				for (int j = 0; j < frame_xsize; ++j) {
				line[j] = qRgba(dataPtr[idx + 2], dataPtr[idx + 1], dataPtr[idx], dataPtr[idx + 3]);
				idx += 4; // für RGBA hier += 4
				}
			}
			bitBlt(videoplane, 0, 0, &img);
		}
	}
}
Müßte er nicht abbrechen, wenn ich den Button erneut drücke?

Gruß und Dank
pm_Snake
Beiträge: 86
Registriert: 7. September 2004 11:33

Beitrag von pm_Snake »

Nein, weil soweit dürfte er eigentlich garnicht kommen weil er noch in der Endlosschleife hängt. Prüfe irgendwo in der Schleife ob die Arbeit getan ist und setze dann stop
>>[-]>[-]>[-]>[-]<<<<<[->>+<-[>>>]>[[<+>-]>+>>]<<<<<]
littlepeoplegirl79
Beiträge: 30
Registriert: 6. September 2004 17:12

Beitrag von littlepeoplegirl79 »

ich wollte die Schleife eigentlich so lange laufen lassen bis der Button wieder gedrückt wurde.
Hatte dafür auch schon in der Schleife nochmal ein connect eingebaut, hatte aber nicht funktioniert.
Kann ich in der Schleife irgnedwie auf den Event vom Button warten?
pm_Snake
Beiträge: 86
Registriert: 7. September 2004 11:33

Beitrag von pm_Snake »

Warum bis der Knopf gedrückt wurde? Was tut dein Programm? Hast du nicht ne andere Bedingung ausser Button nochmal zu drücken? Geht sicher irgendwie, aber ne andere Methode wäre vlt besser. Ist das Bild das gezeichnet wird nicht irgnedwann fertig?
>>[-]>[-]>[-]>[-]<<<<<[->>+<-[>>>]>[[<+>-]>+>>]<<<<<]
littlepeoplegirl79
Beiträge: 30
Registriert: 6. September 2004 17:12

Beitrag von littlepeoplegirl79 »

Das Livevideo soll eigentlich die ganze Zeit, jeden Frame, neu gezeichnet werden. Ich könnte noch einen anderen Button zum stoppen nehmen.

Würde es eigentlich auch gehen, das Video einmal zu zeichnen und dann nur noch den Inhalt aktualisieren?
pm_Snake
Beiträge: 86
Registriert: 7. September 2004 11:33

Beitrag von pm_Snake »

Sry, beim Thema Videos mit Qt bin ich nicht fit.
Du könntest aber, evtl ( weiss nicht ob das wegen der Endlosschleife geht ) per Buttonclick eine Membervariable umsetzen die du in der Zeichnungsschleife abfragst, vlt klappt das....
>>[-]>[-]>[-]>[-]<<<<<[->>+<-[>>>]>[[<+>-]>+>>]<<<<<]
john
Beiträge: 110
Registriert: 14. August 2004 20:55
Wohnort: München

Beitrag von john »

oder Du erstellst einen zweiten Prozess (Thread), der dann den Button überwacht und die Schleife stopt, in dem dass der zweite Thread ein Stop-Byte setzt (das natürlich in der Schleife abgefragt wird)...
littlepeoplegirl79
Beiträge: 30
Registriert: 6. September 2004 17:12

Beitrag von littlepeoplegirl79 »

ich hatte in der while schleife schon eine connect Abfrage, aber das half nicht, oder meintest du etwas anderes?
lepsai
Beiträge: 573
Registriert: 14. September 2004 21:33
Wohnort: Berlin
Kontaktdaten:

Beitrag von lepsai »

Hmmm...


Die Lösung:

void ArBlueBox::showOneFrame()
{
hier ohne while und stop NUR einen Frame anzeigen
}

dann:
void ARBlueBox::frameGrabbing_Slot( bool stop )
{
if(stop)
m_pCaptureTimer->stop();
else
// start capturing timer with 25 frames/sec:
m_pCaptureTimer->start( 40, FALSE );
}

im Konstruktor von ARBlueBox:

m_pCaptureTimer = new QTimer( this);
connect( m_pCaptureTimer, SIGNAL(timeout()), this, SLOT(showOneFrame()) );
littlepeoplegirl79
Beiträge: 30
Registriert: 6. September 2004 17:12

Beitrag von littlepeoplegirl79 »

danke, funktioniert perfekt!
:D
Antworten