Qt / Android /Signale

Gast #5847757
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
#5847771
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.
Gast #5847877
> 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
#5847962
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 7 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.