Seite 1 von 1

Eigenen Slot und Signal definieren...

Verfasst: 31. Mai 2009 12:02
von t1000
moin

ich arbeite zum ersten mal mit qt(jambi) und habe Schwierigkeiten ausführbaren Quellcode zu finden, wo einfach nur ein Slot und ein Signal defniniert und ausgeführt wird... sobald ich ein Beispiel habe, das auch funzt kann ich von da an alleine weiter machen... folgendes habe ich aus

http://doc.trolltech.com/qtjambi-4.4/ht ... slots.html

gefunden und daraus das gebastelt:

Code: Alles auswählen

package Cute_Slots;

import com.trolltech.qt.QSignalEmitter;
import com.trolltech.qt.QtBlockedSlot;

class Signal extends QSignalEmitter 
{
	int value;
        
	public Signal1<Integer> valueChanged = new Signal1<Integer>();

	@QtBlockedSlot
	public int value()
	{
		return value;
    }

    public void setValue(int val)
    {
        if (value != val) 
        {
        	value = val;
            valueChanged.emit(value);
        }
    }

    public Signal()
    {
        value = 0;
    }
}

Code: Alles auswählen

package Cute_Slots;

import com.trolltech.qt.QSignalEmitter;
import com.trolltech.qt.QtBlockedSlot;


public class Slot 
{
	public static void main(String[] args)
	{
		Signal a, b;
	    a = new Signal();
	    b = new Signal();

	    a.valueChanged.connect(b, "setValue(int)");
	    a.setValue(12);     // a.value() == 12, b.value() == 12
	    //b.setValue(48);     // a.value() == 12, b.value() == 48
	}
}
doch leider wird eine Exception geworfen...

Kann mit jmd. bitte ein Beispiel für eine selbstgemachte Slot/Signal-Kommunkation schicken? Dann könnte ich endlich durchstarten..

Verfasst: 31. Mai 2009 12:46
von franzf
Dir fehlt das Q(Core)Application!!!
import com.trolltech.qt.core.QCoreApplication; für reine consolen-Anwendeung
import com.trolltech.qt.gui.QApplication; für gui-Anwendung.

Und dann den Beispielen folgend in main() ein
QCoreApplication.initialize(args); bzw.
QApplication.initialize(args);

Verfasst: 31. Mai 2009 13:20
von t1000
Danke für die Antwort... habs jetzt kapiert.

Ich frage mich nur warum die von Trolltech kein ausführbares und verständliches Beispiel ins Netz gestellt haben...(ist doch kein Aufwand)

Im folgenden ein Besipiel, wie ein Slot nach 7 Sekunden aktiviert wird.

Code: Alles auswählen

package Cute_Slots;

import com.trolltech.qt.QSignalEmitter;
import com.trolltech.qt.QtBlockedSlot;

class Signal extends QSignalEmitter 
{
	int value;
	public Signal1<Integer> valueChanged = new Signal1<Integer>();
	@QtBlockedSlot
	public int value()
	{
		return value;
    }
    public void setValue(int val)
    {
        if (value != val) 
        {
        	value = val;
            valueChanged.emit(value);
        }
    }
    public Signal()
    {
        value = 0;
    }
}

Code: Alles auswählen

package Cute_Slots;

import com.trolltech.qt.QSignalEmitter;
import com.trolltech.qt.core.QCoreApplication;

public class Slot extends QSignalEmitter 
{
	public static void main(String[] args) throws InterruptedException
	{
		QCoreApplication.initialize(args);
		Signal a;
	    a = new Signal();
	    Invoke_Signal.invokeSignalSeven(a);
	    a.valueChanged.connect(a, "setValue(int)");
	    System.out.println(a.value());
	    QCoreApplication.exec();
	}
}

Code: Alles auswählen

package Cute_Slots;

public class Invoke_Signal
{
	public static void invokeSignalSeven(Signal sign) throws InterruptedException
	{
		Thread.sleep(7000);
		sign.setValue(7);
	}
}