У меня есть простое приложение Qt5.2, оно построено для TI AM335x EVM (процессор на базе ARM). Он просто имеет 1 кнопку, которая включает несколько светодиодов на плате.
У меня проблема в том, что сенсорное событие не откалибровано на экран. Пример:
*************
* *
* [] *
* X *
* *
*************
Так что если []
где кнопка, X
это где вы должны коснуться, чтобы активировать его. Это как с ног на голову и назад. Я пробовал с более крупными приложениями (больше кнопок), и тенденция следует.
Теперь, когда я использую графический интерфейс пользователя Qt4.8, предоставляемый TI, сенсорный ввод работает как положено, поэтому по какой-то причине, когда я компилирую код 5.2, мне кажется, что его нужно перекалибровать, но я не уверен, как это сделать. ,
Мои вопросы:
Дополнительная информация, которая может или не может быть полезна:
Моя среда Qt была настроена с помощью этой команды:
./ configure -prefix /usr/Qt5.2 -xplatform linux-am335x-g ++ -no-sse -no-sse2 -no-glib -no-cups -no-largefile -no-accessibility -no-openssl -no-gtkstyle — Открытый исходный код
Вслед за make
а также make install
, Мой путь обновлен, чтобы включить правильную версию набора инструментов TI и домашнюю настроенную / встроенную версию qmake
:
mike @ mike-VirtualBox: /usr/Qt5.2/test_button$ echo $ PATH
/usr/Qt5.2/bin: /home/mike/ti-sdk-am335x-evm-06.00.00.00/linux-devkit/sysroots/i686-arago-linux/usr/bin: /Usr/local/Trolltech/Qt-4.8.5/bin: / Главная / микрофон / бен: / USR / Библиотека / LightDM / LightDM: / USR / местные / SBIN: / USR / местные / бен: / USR / SBIN : / USR / бен: / SBIN: / бен: / USR / игры: / Главная / микрофон / бен
Флаги, используемые в фактической команде компиляции:
arm-linux-gnueabihf-g ++ -c -march = armv7-a -marm -mthumb-interwork -mfloat-abi = hard -mfpu = неон -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. -Я. -I ../ include -I ../ include / QtWidgets -I ../ include / QtGui -I ../ include / QtCore -I. -o main.o main.cpp
Приложение запускается с:
./ touch_keys -platform eglfs
Приложение:
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
Итак, я узнал, что сенсорная поддержка через tslib
не требуется при использовании плагина платформы eglfs. eglfs имеет встроенные обработчики ввода evdev, поэтому поддержка мыши / клавиатуры / сенсорного ввода не требует подключения к нужному устройству.
Это означает, что evdevtouch не распознает сенсорный экран на am335x, это должно было быть исправлено в 5.2, но, очевидно, все еще нет. «Исправить» (обходной путь) — перевернуть экран вручную, экспортировав переменную среды QPA:
export QT_QPA_EVDEV_TOUCHSCREEN_PARAMETERS="rotate=180"
Это правильно преобразует координаты.
Других решений пока нет …