Eigenen Slot und Signal definieren...

Alles zum Qt Framework für Java
Antworten
t1000
Beiträge: 2
Registriert: 31. Mai 2009 11:46

Eigenen Slot und Signal definieren...

Beitrag von t1000 » 31. Mai 2009 12:02

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..

franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf » 31. Mai 2009 12:46

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);

t1000
Beiträge: 2
Registriert: 31. Mai 2009 11:46

Beitrag von t1000 » 31. Mai 2009 13:20

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);
	}
}

Antworten