Seite 1 von 1
verzögertes Signal
Verfasst: 25. Juni 2009 15:35
von trusch
Hallo,
ich habe ein QtableWidget und möchte etwas ausführen, nachdem der Mauszeiger 2-3 Sekunden drauf gehalten hatte.
Das Signal habe ich so connected:
connect(tableWidget, SIGNAL(itemEntered(QTableWidgetItem*)), this, SLOT(testslot()));
Da ist es aber leider nicht verzögert. Geht das überhaupt?
Verfasst: 25. Juni 2009 15:43
von Superheftig
kannst nen timer dazwischen schalten
QTimer::singleShot zum Beispiel.
machst dir nen slot das singal von dem table widget connectest du mit dem slot. In dem Slot startest du den timer und connectest das singal mit dem slot der verzögert ausgeführt werden soll.
Code: Alles auswählen
public slot:
void meinVerzögerterSlot() {
QTimer::singleShot(3000, this, SLOT(testslot()));
}
connect(tableWidget, SIGNAL(itemEntered(QTableWidgetItem*)), this, SLOT(meinVerzögerterSlot()));
Verfasst: 25. Juni 2009 15:59
von trusch
Danke für die Antwort,
ist aber leider nicht die Lösung. Wenn ich jetzt 1 Sekunde die Maus drauf halte, wird das Signal nach 3 Sekunden doch noch ausgelöst.
Ich möchte das das Signal erst, wenn der Mauszeiger mehr als 3 Sekunden über der Tabelle halten wird, ausgelöst wird.
Verfasst: 25. Juni 2009 16:24
von Superheftig
Falls es ein singal gibt dass ausgelöst wird wenn man das wieder verläßt kannst du es ja abfangen...sonst weiß ich jetzt auch nichts
Verfasst: 25. Juni 2009 16:33
von trusch
das gibt es ja leider nicht..... trotzdem Danke
Verfasst: 25. Juni 2009 16:33
von upsala
Bei mousePress Timer starten.
Bei mouseRelease Timer stoppen
Ansonsten gibts nach 3 Sek. den Timeout.
Verfasst: 26. Juni 2009 07:45
von trusch
Danke für die Antworten, ich hab es mit einem Eventfilter gelöst:
Code: Alles auswählen
bool mainwindow1::eventFilter(QObject *object, QEvent *event)
{
if (event->type() == QEvent::Enter && object == tableWidget)
{
delaytimer->start(2000);
}
if (event->type() == QEvent::Leave && object == tableWidget)
{
delaytimer->stop();
}
return false;
}