verzögertes Signal

Alles rund um die Programmierung mit Qt
Antworten
trusch
Beiträge: 27
Registriert: 22. Juni 2009 09:38

verzögertes Signal

Beitrag 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?
Superheftig
Beiträge: 63
Registriert: 6. September 2008 15:20

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

trusch
Beiträge: 27
Registriert: 22. Juni 2009 09:38

Beitrag 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.
Superheftig
Beiträge: 63
Registriert: 6. September 2008 15:20

Beitrag 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
trusch
Beiträge: 27
Registriert: 22. Juni 2009 09:38

Beitrag von trusch »

das gibt es ja leider nicht..... trotzdem Danke
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Bei mousePress Timer starten.
Bei mouseRelease Timer stoppen
Ansonsten gibts nach 3 Sek. den Timeout.
trusch
Beiträge: 27
Registriert: 22. Juni 2009 09:38

Beitrag 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;
}
Antworten