Forum: PC-Programmierung Qt / Android /Signale


von Olaf (Gast)


Lesenswert?

Moin da draussen,

Ich schreibe gerade mit Qt ein Programm wo ich ein QTableWidget nutze 
und ein Signal bekommen moechte wenn ich mit den Fingern auf eines der 
Felder rumtatsche. Das Widget unterstuetzt auch einige Signale, aber ich 
bekomme keines egal was ich da probiere.
Gibt es da einen signifakten Unterschied zu Android und dem Rest der 
Welt weil man mit dem Finger schlechter zwischen touchen, klicken und 
doppelklicken unterscheiden kann? Oder bin ich nur zu bloed?

Ich habe das hier mit den unterschiedlichsten Signalen durchprobiert,
aber meine slotfunktion wird einfach nicht aufgerufen.

connect(ui->Table_Pass,SIGNAL(clicked()),this, SLOT(TableClicket( )));

connect(ui->Table_Pass,SIGNAL(itemPressed(QTableWidgetItem)),this, 
SLOT(TableItemEnter( QTableWidgetItem)));

Olaf

von Rolf M. (rmagnus)


Lesenswert?

Olaf schrieb:
> Gibt es da einen signifakten Unterschied zu Android und dem Rest der
> Welt

Einen Unterschied von was "zu Android und dem Rest der Welt"?

> weil man mit dem Finger schlechter zwischen touchen, klicken und
> doppelklicken unterscheiden kann? Oder bin ich nur zu bloed?

Hast du denn überhaupt einen Touchscreen? ;-)

> Ich habe das hier mit den unterschiedlichsten Signalen durchprobiert,
> aber meine slotfunktion wird einfach nicht aufgerufen.
>
> connect(ui->Table_Pass,SIGNAL(clicked()),this, SLOT(TableClicket( )));

Die wird vermutlich nur aufgerufen, wenn du auf eine Stelle des Widgets 
klickst, wo keine Zelle oder irgendwas anderes clickbares ist.

> connect(ui->Table_Pass,SIGNAL(itemPressed(QTableWidgetItem)),this,
> SLOT(TableItemEnter( QTableWidgetItem)));

Die Angabe ist falsch. Der Parameter ist kein QTableWidgetItem, sondern 
ein Zeiger darauf, also QTableWidgetItem*. Da hätte das Programm beim 
Ausführen eigentlich eine Fehlermeldung ausgeben müssen, dass das 
angegebene Signal nicht existiert.
Besser ist es aber, gleich die neuere Version von connect zu verwenden 
(gibt's seit Qt5), die direkt mit Memberfunktions-Zeigern arbeitet. Die 
hat den Vorteil, dass du den Fehler schon zur Compilezeit bekommst.
1
connect(ui->Table_Pass, &QTableWidget::itemPressed, this, &Irgendwas::TableItemEnter);
Irgendwas muss dann noch durch den Namen deiner Klasse ersetzt werden.

von Olaf (Gast)


Lesenswert?

> Hast du denn überhaupt einen Touchscreen? ;-)

Doch doch...ich hab krass mobiles Fon ohne Tastatur1


>  Der Parameter ist kein QTableWidgetItem, sondern
> ein Zeiger darauf, also QTableWidgetItem*.

Du hast recht! Daran lag es und jetzt funktioniert es. Ich hatte das 
zuerst auch richtig als Zeiger, aber irgendwann hab ich wohl mal zwei 
Dinge gleichzeitig geaendert/getestet.

> Besser ist es aber, gleich die neuere Version von connect zu verwenden
> (gibt's seit Qt5),

Ach..schon wieder was neues? Seufz. Ich hab da gestern erstmalig von 
gelesen und wollte nicht gleich mit etwas ganz neuem rumzaubern. Mal 
schauen...

olaf

von Rolf M. (rmagnus)


Lesenswert?

Olaf schrieb:
>> Besser ist es aber, gleich die neuere Version von connect zu verwenden
>> (gibt's seit Qt5),
>
> Ach..schon wieder was neues? Seufz. Ich hab da gestern erstmalig von
> gelesen und wollte nicht gleich mit etwas ganz neuem rumzaubern. Mal
> schauen...

Naja, so neu ist das auch nicht. Wurde wie gesagt mit Qt5 eingeführt - 
vor über 6 Jahren.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.