2014-02-13 5 views
6

Ich habe eine einfache Qt5.2-Anwendung, die für den TI AM335x EVM (ARM-basierten Prozessor) gebaut wurde. Es hat nur 1 Knopf, der einige LEDs auf dem Board aktiviert.Wie kalibrieren Sie Touch-Ereignisse für eine Qt-Anwendung neu?

Das Problem, das ich habe, ist, dass das Berührungsereignis nicht auf den Bildschirm kalibriert ist. Beispiel: So

************* 
*   * 
* []  * 
*  X * 
*   * 
************* 

wenn die [] ist, wo der Knopf ist, ist die X, wo Sie berühren, es zu aktivieren. Es ist, als ob es auf dem Kopf steht und rückwärts. Ich habe es mit größeren Anwendungen (mehr Tasten) versucht und der Trend folgt.

Jetzt, wenn ich die Qt4.8 GUI-Benutzeroberfläche von TI verwendet, funktioniert die Berührung wie erwartet, so aus irgendeinem Grund, wenn ich mit Code 5.2 kompilieren scheint es muss neu kalibriert werden, aber ich bin mir nicht sicher wie geht das.

Meine Fragen:

  1. Hat jemand mit Qt laufen in so etwas wie dies in der Vergangenheit zu arbeiten?
  2. Wer Qt kennt, weiß, ob es eine Fähigkeit gibt, programmgesteuert neu zu kalibrieren? (Ich kann nichts über das scheint auf der Qt-Website zu finden)

Zusätzliche Informationen, die nicht hilfreich sein kann:

wurde meine Qt-Umgebung mit diesem Befehl konfiguriert:

./configure -prefix /usr/Qt5.2 -xplatform linux-am335x-g ++ -keine-sse -no-sse2 -no-glib -no-cups -keine-große -datei -keine-accessibility -keine-openssl -no-gtkstyle -opensource

Gefolgt von einem make und make install. Mein Weg wird aktualisiert, um die richtige Version der TI-Toolchain zu schließen und das Haus konfiguriert/built Version von qmake:

mike @ mike-VirtualBox: /usr/Qt5.2/test_button$ echo $ PATH
/usr/Qt5.2/bin: /home/mike/tis-sdk-am335x-evm-06.00.00.00/linux-devkit/sysroots/i686-arago-linux/usr/bin:/usr/local/Trolltech/Qt-4.8.5/bin:/home/mike/bin:/usr/lib/lightdm/lightdm:/usr/lokal/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/spiele:/home/mike/bin

Flags in dem eigentlichen Kompilierung Befehl:

Arm-Linux-gnueabihf-g ++ = -c -march ARMv7-a -marm -mthumb-Zusammenwirkungs -mfloat-abi = hart -mfpu = neon -mtune = cortex -a8 -O2 -Wall -W-D_REENTRANT -fPIE -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I ../ mkspecs/linux-am335x-g ++ -I. -ICH. -I ../ include -I ../ include/QtWidgets -I ../ include/QtGui -I ../ include/QtCore -I. -o main.o main.cpp

Die Anwendung mit gestartet wird:

./ Touch_keys -Plattform eglfs

Die Anwendung:

main.cpp:

#include "mainwindow.h" 
#include <QApplication> 

int main(int argc, char *argv[]) 
{ 
    QApplication app(argc, argv); 
    MainWindow mainWindow; 
    mainWindow.showMaximized(); 
    return app.exec(); 
} 

mainwindow.cpp

#include "mainwindow.h" 
#include <QtCore/QCoreApplication> 
#include <QDebug> 
#include <QFile> 
MainWindow::MainWindow(QWidget *parent) 
    : QMainWindow(parent) 
{ 
    // Create the button, make "this" the parent 
    m_button = new QPushButton("Light LEDs", this); 

    // set size and location of the button 
    m_button->setGeometry(QRect(QPoint(100, 100), 
           QSize(200, 50))); 

    // Connect button signal to appropriate slot 
    connect(m_button, SIGNAL(released()), this, SLOT(handleButton())); 
} 

void MainWindow::handleButton() 
{ 
    char buf[10]; 
    // change the text 
    m_button->setText("Boom"); 

    // resize button 
    m_button->resize(100,100); 
} 

mainwindow.h

#ifndef MAINWINDOW_H 
#define MAINWINDOW_H 
#include <QMainWindow> 
#include <QPushButton> 

namespace Ui { 
    class MainWindow; 
} 

class MainWindow : public QMainWindow 
{ 
    Q_OBJECT 
public: 
    explicit MainWindow(QWidget *parent = 0); 
private slots: 
    void handleButton(); 
private: 
    QPushButton *m_button; 
}; 

#endif // MAINWINDOW_H 
+0

@artlessnoise - Es handelt sich um ein resistives Touch-Display, das mit dem AM335x EVM geliefert wird. Das Display selbst verfügt über einen Kalibrierungsmechanismus und wird beim ersten Start automatisch ausgeführt und die Ergebnisse werden auf der uSD-Karte gespeichert. Nach einer erfolgreichen Kalibrierung arbeitet die TI "app launcher" GUI (Matrix genannt) korrekt und reagiert, aber dann starte ich meine hausgemachten Qt 5.2 Anwendungen, die Berührungen werden rückwärts und auf den Kopf gestellt, wo sie sein sollten. Es muss also etwas nicht stimmen mit dem, wie ich die Anwendungen konfiguriere oder starte ... – Mike

+0

@artlessnoise - In Qt4.8 gab es einen '-qt-mouse-tslib' Konfigurationsbefehl, aber als ich zu Qt5.2 wechselte, kam das als ungültiges Konfigurations-Flag ... also bin ich mir nicht sicher, wie "touch" jetzt bekannt ist. Ich starte die Anwendung als '-Plattform eglfs'. Es ist wahrscheinlich, dass mein Problem und die Tatsache, dass ich nicht weiß, welche Touchscreen-Bibliothek verwendet wird, ein und dasselbe sind, aber ich bin mir nicht sicher. – Mike

+0

Ich denke, Sie verwenden 'QMAKE_LIBS + = -lts' in der * qmake.conf * und konfigurieren Prüfungen und findet es? Ich denke, dass Sie * -device * und [* -device-option *] (https://www.google.ca/#q=qt5+device-option) benötigen, um Dateien (qmake.conf) zu konfigurieren und zu unterstützen, um dies zu setzen oben. Es scheint, dass dies nirgends wirklich gut dokumentiert ist. Ich musste mir Beispiele ansehen und viel googeln, bevor ich es zur Arbeit brachte. Du brauchst * libts *, um die Umwandlung von Berührungskoordinaten zu Bildschirm für deine resistive Berührung durchzuführen; Dies sind die Kalibrierungsdaten. –

Antwort

10

So habe ich festgestellt, dass die Touch-Unterstützung über tslib nicht erforderlich sein sollte, wenn Sie das eglfs-Plattform-Plugin verwenden. eglfs hat die eingebauten evdev-Input-Handler, so dass die Maus/Tastatur/Touch-Unterstützung ohne weiteres benötigt wird, um sich mit dem richtigen Gerät zu verbinden.

Das bedeutet, dass evdevtouch den Touchscreen auf am335x nicht erkennt, dies sollte in 5.2 korrigiert werden, ist aber eindeutig immer noch nicht. Die „fix“ (Umgehung) ist der Bildschirm von Hand zu drehen, indem eine Umgebungsvariable QPA exportieren:

export QT_QPA_EVDEV_TOUCHSCREEN_PARAMETERS="rotate=180" 

Diese richtig die Koordinaten transformiert.

+0

Gibt es andere Optionen für 'TOUCHSCREEN_PARAMETERS'? Ich habe bemerkt, dass die Qt-Dokumentation eher spärlich ist. – GrandAdmiral

+0

-plugin evdevtouch unterstützt auch ": invertx" und ": inverty", die in der schlechten Dokumentation nicht dokumentiert sind. Ich musste in den Quellcode schauen. (Getestet an Qt 5.4.2) –

+0

Ich habe versucht, die Konfiguration zu exportieren und dann meine Anwendung auszuführen, aber nichts ändern: s –

Verwandte Themen