Du hast wohl noch nicht viel mit SIGNAL und SLOT gemacht, was? Das ist nämlich eine Besonderheit von QT.
Jede Klasse von QT hat Methoden, die (in der Doku) als SIGNAL gekennzeichnet sind. Diese Methoden sind spezielle Methoden, das sind Signale, die auftreten wenn der Benutzer eine bestimmte Aktion mit einem Widget gemacht hat.
Dieses Signal kann mit einem Slot verbunden werden. Das ganze wird mit QObject::connect (oder nur connect, wenn deine Klasse ein QObject ist) gemacht.
So, nun kannst du deine eigenen SLOTs definieren, mit denen du ein Signal verarbeiten kannst. Ein SLOT muss als Rückgabewert immer void haben und ein SLOT muss die gleichen Übergabeparameter haben wie ein SIGNAL.
Ein SIGNAL kannst du mit mehreren SLOTS verbinden.
Ein konkretes Beispiel:
Code: Alles auswählen
class MyWidget : public QDialog
{
Q_OBJECT //dieses Macro muss du angeben, wenn deine Klasse SLOT's enthält
private:
QListWidget* m_pListWidget;
public:
MyWidget(void);
public slots: //ab hier definierst du deine SLOT's
void ItemSelected(QListWidgetItem* pSelectedItem); //Rückgabetyp: void, Übergabeparameter müssen mit denen des Signals übereinstimmen
private:
void Init(void);
}
//cpp-file
MyWidget::MyWidget(void)
{
Init();
}
MyWidget::ItemSelected(QListWidgetItem* pSelectedItem)
{
//dieser Slot wird aufgerufen, sobald das signal "itemClicked" ausgelöst wurde
}
void MyWidget::Init(void)
{
//hier z. B. erstellst du deine QListWidget
m_pListWidget = new QListWidget(this);
//verbindung zwischen SLOT und SIGNAL herstellen
QObject::connect(m_pListWidget, SIGNAL(itemClicked(QListWidgetItem*)), this, SLOT(ItemSelected(QListWidgetItem*)));
/*
- zuerst wird der Sender angegeben, in diesem Beispiel ist es die ListWidget
- dann wird die SIGNAL-Methode angegeben, die ein Senderobject zur Verfügung stellt (siehe Doku), in diesem Beispiel ist es das Signal itemClicked, dass immer dann ausgelöst wird, wenn ein User ein Item angeklickt hat
- dann wird der Empfänger angegeben, der die passende SLOT Methode aufweist
- und zum Schlusswird die SLOT-Methode angegeben, die beim Sender definiert sein muss.
Wenn eine verbindung zwischen SLOT und SIGNAL nicht hergestellt werde konnte, liefert connect false zurück.
Auf den ersten Blick ist dieses Verfahren recht aufwendig, aber wenn du es einmal verstanden hast, möchtest du es nicht mehr missen.
*/
}
MfG, Alci.