PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : QT: Kann man mit einem Slot ein Widget erstellen?



chapaev
07-02-2005, 20:39
Hi Leute,

Ich brauche ein Slot der eine Widget erstellt wenn er ausgeführt wird. Deshalb wolte ich fragen ob es überhaupt möglich ist? Bzw ist es möglich, dass ein Slot ein Widget aus einem Header Datei lädt? Falls es möglic ist, kann mir eine verraten wie das geht :rolleyes: ?

MfG

chapaev

peschmae
07-02-2005, 21:03
Ich brauche ein Slot der eine Widget erstellt wenn er ausgeführt wird. Deshalb wolte ich fragen ob es überhaupt möglich ist?

Klar kann ein Slot das - das ist ja nicht viel mehr als eine normale Funktion.


Bzw ist es möglich, dass ein Slot ein Widget aus einem Header Datei lädt? Falls es möglic ist, kann mir eine verraten wie das geht :rolleyes: ?


Das verstehe ich nicht. Wie meinst du das mit der Header-Datei?

MfG Peschmä

chapaev
07-02-2005, 23:09
Klar kann ein Slot das - das ist ja nicht viel mehr als eine normale Funktion.
Gibt es irgend wo ein faq daführ? Falls nicht kannst du mir dann vielleicht ein kleines Beispiel zeigen?


Das verstehe ich nicht. Wie meinst du das mit der Header-Datei?
Damit meine ich sowas ähnliches wie config.h Datei (wird von configure script erstellt).
Kde control center funktioniert doch so, man kann jeder Zeit ein nojes modul hinzufügen.

MfG

chapaev

anda_skoa
08-02-2005, 00:31
Gibt es irgend wo ein faq daführ? Falls nicht kannst du mir dann vielleicht ein kleines Beispiel zeigen?

Wie peschmae schon geschrieben hat ist ein Slot auch nur eine Methode, es geht also genau so wie überall anderes auch.


Kde control center funktioniert doch so, man kann jeder Zeit ein nojes modul hinzufügen.

Nein, das sind Plugins, d.h. da wird erst zur Laufzeit bestimmt, was da ist.
Ein Header steht ja schon zur Compilezeit zur Verfügung.

Ciao,
_

chapaev
08-02-2005, 16:19
Wie peschmae schon geschrieben hat ist ein Slot auch nur eine Methode, es geht also genau so wie überall anderes auch.
Also wenn ich das mache:


void Form1::init()
{
createWidget();
}


void Form1::createWidget()
{
QPushButton *button = new QPushButton(grbox);
button->setText("test");
grboxLayout->addWidget( button, 0, 0 );
QPushButton *button2 = new QPushButton(grbox);
button2->setText("test2");
grboxLayout->addWidget( button2, 0, 1 );

}

Klappt es auch, aber wenn ich jetzt ein Button mit diesem slot connecte, anstatt init, dann funktioniert das nciht mehr. :-(
Woran liegt das? Wenn ich mir das so anschaue, müsste das doch auch mit einem Button funktonieren. Oder kann qt keine widgets erzeugen wenn das programm schon gestartet ist?

chapaev
08-02-2005, 16:25
Das Problemm hat sich gelöst. Ich habe "button-> show()" vergessen. Aber jetzt habe ich ein anderes Problemm! :rolleyes: wie kann ich diesen slot nach dem aktivieren wieder deaktivieren?

MfG

chapaev

Boron
08-02-2005, 16:41
Du kannst Slots nicht "deaktivieren", weil sie ja eignetlich nur normale Methoden sind.

Du kannst aber auf die gleiche Art wie du das Widget erzeugt hat (Aufruf des Slots war der Auslöser), diese Arbeit wieder rückgängig machen:
button->hide();
~button;
wasAuchImmer();

chapaev
08-02-2005, 16:55
Danke für das schnelle Antwort!


~button;
Hmm das habe ich irgen wo schon mal gesehen. Was bedeutet das eigentlich, bzw was macht das?

MfG

chapaev

anda_skoa
08-02-2005, 17:30
Du kannst Slots nicht "deaktivieren", weil sie ja eignetlich nur normale Methoden sind.

Du kannst aber die Signal/Slot Verbindung lösen, falls du das beabsichtigst.
Siehe dazu QObject::disconnect

Ciao,
_