天嵌 ARM开发社区

 找回密码
 注册
查看: 10593|回复: 8

Qt 鼠标移植 (原创)

[复制链接]
Berton 发表于 2010-4-30 14:16:59 | 显示全部楼层 |阅读模式
最近成功的移植了Qt4.5。非常感谢天嵌的指导。

一.        内核的移植
保证在内核中添加鼠标驱动。
具体路径如下:
Device Driver->HID Devices->
选上/dev/hiddev raw HID device support.

这里的HID是human input device的意思。
二.Qt的鼠标配置
1.首先要编译Qt,其配置如下:
        echo yes | ../../qt-embedded-linux-opensource-src-4.5.0/configure -prefix /opt/EmbedSky/qt-4.5/__install/arm/ -release -shared -fast -no-largefile -qt-sql-sqlite -no-qt3support -no-xmlpatterns -no-mmx -no-3dnow -no-sse -no-sse2 -no-svg -no-webkit -qt-zlib -qt-gif -qt-libtiff -qt-libpng -qt-libjpeg -make libs -nomake examples -nomake docs -nomake demo -no-nis -no-cups -no-iconv -no-dbus -no-openssl -xplatform qws/linux-arm-g++ -embedded arm -little-endian -qt-freetype -depths 16 -qt-gfx-linuxfb -qt-gfx-transformed -qt-gfx-multiscreen -no-gfx-vnc -no-gfx-qvfb -qt-kbd-usb -no-glib -armfpa &&

这里说明一下,配置与天嵌的相比,只是删除了触摸屏部分。
其实直接用天嵌配置也是可以的,但这样的话,lib等会大一点。
2.修改开发板/bin/qt4,修改如下:
export set QWS_MOUSE_PROTO=" Intellimouse:/dev/mouse0"  --只支持鼠标
export set QWS_MOUSE_PROTO="TSLIB:/dev/event0 Intellimouse:/dev/mouse0"
这样就完成了鼠标的移植了。
下面做一些解释。

        我用的是双飞燕的鼠标,能用的driver为intellimouse或者MouseMan
        这里解释一下为什么driver option为:/dev/mouse0。看一下源码,会看到我们做的USB mouse的设备驱动名为“USB mouse”,那么为什么我们最后的设备名会变成mouse0呢?
这是因为有更上层驱动对USB mouse进行封装。就等同于我们用串口的时候,最后用终端的设备名为TTY.
        编译Qt会用到gmake,这个gmake是属于Linux自带的编译工具。使用命令“which gmake”可以看到gmake的位置。
关于交叉编译环境。我们要使用交叉编译环境进行编译,主要体现在配置中 –xplatform qws/linux-arm-g++ 这句话。为什么有qws呢。这里指的是它会在qt中的mkspecs/qws/linux-arm-g++/qmake.conf 中有相应的编译器配置。在qmake.conf中,定义了默认的编译器为linux-arm-g++。
       


上面的配置可以从以下的代码去理解。
QWSMouseHandler *QMouseDriverFactory::create(const QString& key, const QString &device)
{
    QString driver = key.toLower();
#ifndef QT_NO_QWS_MOUSE_LINUXTP
    if (driver == QLatin1String("linuxtp") || driver.isEmpty())
        return new QWSLinuxTPMouseHandler(key, device);
#endif
#ifndef QT_NO_QWS_MOUSE_YOPY
    if (driver == QLatin1String("yopy") || driver.isEmpty())
        return new QWSYopyMouseHandler(key, device);
#endif
#ifndef QT_NO_QWS_MOUSE_VR41XX
    if (driver == QLatin1String("vr41xx") || driver.isEmpty())
        return new QWSVr41xxMouseHandler(key, device);
#endif
#ifndef QT_NO_QWS_MOUSE_PC
    if (driver == QLatin1String("auto")
        || driver == QLatin1String("intellimouse")
        || driver == QLatin1String("microsoft")
        || driver == QLatin1String("mousesystems")
        || driver == QLatin1String("mouseman")
        || driver.isEmpty()) {
        return new QWSPcMouseHandler(key, device);
    }
#endif
#ifndef QT_NO_QWS_MOUSE_BUS
    if (driver == QLatin1String("bus"))
        return new QWSBusMouseHandler(key, device);
#endif
#ifndef QT_NO_QWS_MOUSE_TSLIB
    if (driver == QLatin1String("tslib") || driver.isEmpty())
        return new QWSTslibMouseHandler(key, device);
#endif
#ifndef QT_NO_QWS_MOUSE_QVFB
    if (driver == QLatin1String("qvfbmouse") || driver == QLatin1String("qvfb"))
        return new QVFbMouseHandler(key, device);
#endif

上面的代码中driver即是“Intellimouse”
至于更上层的代码,大家有空可以详细看看,这里就不展开说了。

Berton

评分

参与人数 1 +1 收起 理由
李华伟 + 1 很给力!

查看全部评分

亚瑟王 发表于 2010-4-30 18:08:47 | 显示全部楼层
好帖子,加精了。
 楼主| Berton 发表于 2010-5-7 21:39:29 | 显示全部楼层
最近发现一个Bug(触摸屏指针不能用):
如果删掉etc/poitercal,而bin/qt4里的设置为:
export set QWS_MOUSE_PROTO="TSLIB:/dev/event0 Intellimouse:/dev/mouse0"
重启开发板,
进行指针校正。
发现触摸屏不能用,只有鼠标能用。

原因:
估计是同时记录了鼠标的位置和触摸屏的位置,导致只有鼠标能用。

一个比较笨的解决办法:P
删掉etc/poitercal,而bin/qt4里的设置为:
export set QWS_MOUSE_PROTO="TSLIB:/dev/event0"
重启开发板,
进行指针校正。
修改bin/qt4里的设置为:
export set QWS_MOUSE_PROTO="TSLIB:/dev/event0 Intellimouse:/dev/mouse0"
重启开发板,解决。
我认为鼠标指针本身就是一个指针,所以没有必要进行校正。咱们还没有见过用Windows时,需要进行鼠标指针校正。
亚瑟王 发表于 2010-5-8 21:31:19 | 显示全部楼层
不对,你说的不对,tslib校验时根本没有初始化鼠标,就谈不上记录了鼠标的信息啊。我认为不是这样的,因为我今天移植qt4.6.2时用了你说的这个脚本,没有任何问题。
shwjl 发表于 2010-6-21 16:32:52 | 显示全部楼层
1# Berton


好帖子,我要试一试,要是鼠标和触摸都能用就更好了
shwjl 发表于 2010-7-8 14:52:55 | 显示全部楼层
鼠标拔掉再插上,不能动了
亚瑟王 发表于 2010-7-9 19:32:53 | 显示全部楼层
要热插拔usb鼠标,需要修改qt的机制才能解决。
bigflower 发表于 2011-12-16 23:04:25 | 显示全部楼层
我也遇到同样的问题
ww110052181 发表于 2012-4-30 20:02:19 | 显示全部楼层
先看看一下
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号 )

GMT+8, 2024-4-23 20:41 , Processed in 1.062500 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表