gpt4 book ai didi

c++ - 如何为 Qt 应用程序重新校准触摸事件?

转载 作者:IT王子 更新时间:2023-10-29 00:45:32 24 4
gpt4 key购买 nike

我有一个简单的 Qt5.2 应用程序,它是为 TI AM335x EVM(基于 ARM 的处理器)构建的。它只有 1 个按钮,可以启用电路板上的一些 LED。

我遇到的问题是触摸事件未针对屏幕进行校准。示例:

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

因此,如果 [] 是按钮所在的位置,那么 X 就是您必须触摸才能激活它的位置。这就像它颠倒和倒退。我已经尝试过更大的应用程序(更多按钮)并且趋势随之而来。

现在当我使用TI提供的Qt4.8 GUI用户界面时,触摸按预期工作,所以由于某种原因,当我用5.2代码编译时似乎需要重新校准,但我不确定如何这样做。

我的问题:

  1. 使用 Qt 的人过去是否遇到过类似情况?
  2. 任何了解 Qt 的人都知道是否能够以编程方式重新校准? (我在 Qt 站点上似乎找不到任何相关信息)

可能有用也可能没用的附加信息:

我的 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 -opensource

后跟 makemake 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:/home/mike/bin:/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/mike/bin

实际编译命令中使用的标志:

arm-linux-gnueabihf-g++ -c -march=armv7-a -marm -mthumb-interwork -mfloat-abi=hard -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. -I. -I../include -I../include/QtWidgets -I../include/QtGui -I../include/QtCore -I. -o main.o main.cpp

应用程序启动时:

./touch_keys -platform eglfs

应用:

主要.cpp:

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

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

主窗口.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);
}

主窗口.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

最佳答案

所以我发现在使用 eglfs 平台插件时不需要通过 tslib 的触摸支持。 eglfs 具有内置的 evdev 输入处理程序,因此鼠标/键盘/触摸支持无需任何其他东西即可连接到正确的设备。

这意味着 evdevtouch 无法识别 am335x 上的触摸屏,这应该在 5.2 中得到纠正,但显然仍然没有。 “修复”(解决方法)是通过导出 QPA 环境变量手动翻转屏幕:

export QT_QPA_EVDEV_TOUCHSCREEN_PARAMETERS="rotate=180" 

这会正确地转换坐标。

关于c++ - 如何为 Qt 应用程序重新校准触摸事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21758873/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com