linux 编译qt程序如何去除鼠标但qt5 触摸屏屏可用

下次自动登录
现在的位置:
& 综合 & 正文
修改Embedded QT鼠标驱动支持IRTOUCH触摸屏
背景知识:
http://doc./4.6/qt-embedded-architecture.html
Qt for Embedded Linux Architecture
http://doc./4.6/qt-embedded-pointer.html#available-drivers
Qt for Embedded Linux Pointer Handling
QTSRC/src/gui/embeded/qmouselinuxinput_qws.cpp
主要的要点是:
1. EQT 默认只支持“pc”类型的鼠标驱动,具体来说就是如下类型:Auto、IntelliMouse、Microsoft、MouseSystems。
要使EQT 支持Linux input子系统的鼠标驱动,在编译QT时 configure 要添加参数: -qt-mouse-linuxinput
(具体的configure的帮助请运行: ./configure -embedded -help .)
2. 确保触摸屏提交到Linux input子系统的坐标数据是正确的,我们需要通过解析/dev/event0 的数据来证明
原理说明:
1. 分辨率转化和校准
其实,这一款32寸的IRTOUCH产生的坐标值是绝对坐标,范围x、y均为 0~4096。所以,我们运行的QT如果直接获取
event0产生的坐标的话,鼠标位置便会超出屏幕的显示范围,因此,我们需要进行一下坐标值转化,具体的函数如下:
void adjuest(int* pX,int* pY)
//* pX = 1280.0f / 1248 * (2272 - *pX); // 中间版本
////* pY = 720.0f / 700 * (*pY - 1030);
////* pX = (int)(1280.0f / 4062 * (*pX - 7)); // 最旧版本
////* pY = (int)(720.0f / 4071 * (*pY));
*pX = (int)((*pX)*50);
*pY = (int)((*pY)*720.0f/4080);
////* pX = (int)((*pX)*95); // 最新版本
////* pY = (int)((*pY)*720.0f/4095);
该函数就可以将原来的分辨率转换成 ;至于具体的数值,我们需要根据实际的屏幕产生的数据进行修改,
重点在于四角和中间点。
分辨率一旦设置合适,屏幕鼠标也就会校准,该函数的作用类似于void QWSLinuxInputMousePrivate::readMouseData()函数中
调用的 pos = m_handler-&transform(pos)。transform()函数会根据/etc/pointercal来进行校准,如果你没有运行过校准程序
默认会没有该文件的。(QT自带的例子里面有一个校准程序:qt\examples\qws\mousecalibration。但是,由于不同的嵌入式
平台采用的芯片差异性很大,所以,这个校准程序往往无法使用,所以,才会自己编写一个adjuest()函数来调整原始坐标值。)
2. 触摸屏的降噪和去抖动
由于触摸屏本身的原因导致每次产生的数据并不是都准确和正确的,所以,我们需要对坐标进行一些处理,
主要目的在于尽量消除误差,提高触摸屏的准确度。由于不用硬件会有不同的情况,我们需要变通的处理。这一点也是比较
让人头疼的地方。下面就简单的贴出:
#include "qmouselinuxinput_qws.h"
#include &QScreen&
#include &QSocketNotifier&
#include &qplatformdefs.h&
#include &private/qcore_unix_p.h& // overrides QT_OPEN
#include &errno.h&
#include &linux/input.h&
QT_BEGIN_NAMESPACE
class QWSLinuxInputMousePrivate : public QObject
QWSLinuxInputMousePrivate(QWSLinuxInputMouseHandler *, const QString &);
~QWSLinuxInputMousePrivate();
void enable(bool on);
void setButton(int num){m_buttons =}
private Q_SLOTS:
void readMouseData();
QWSLinuxInputMouseHandler *m_
QSocketNotifier *
QWSLinuxInputMouseHandler::QWSLinuxInputMouseHandler(const QString &device)
: QWSCalibratedMouseHandler(device)
printf("Enter QWSLinuxInputMouseHandler \n");
d = new QWSLinuxInputMousePrivate(this, device);
QWSLinuxInputMouseHandler::~QWSLinuxInputMouseHandler()
void QWSLinuxInputMouseHandler::suspend()
d-&enable(false);
void QWSLinuxInputMouseHandler::resume()
d-&enable(true);
QWSLinuxInputMousePrivate::QWSLinuxInputMousePrivate(QWSLinuxInputMouseHandler *h, const QString &device)
: m_handler(h), m_notify(0), m_x(0), m_y(0), m_buttons(0)
setObjectName(QLatin1String("LinuxInputSubsystem Mouse Handler"));
QString dev = QLatin1String("/dev/event0");
if (device.startsWith(QLatin1String("/dev/")))
m_fd = QT_OPEN(dev.toLocal8Bit().constData(), O_RDONLY | O_NDELAY, 0);
if (m_fd &= 0) {
m_notify = new QSocketNotifier(m_fd, QSocketNotifier::Read, this);
connect(m_notify, SIGNAL(activated(int)), this, SLOT(readMouseData()));
qWarning("Cannot open mouse input device '%s': %s", qPrintable(dev), strerror(errno));
QWSLinuxInputMousePrivate::~QWSLinuxInputMousePrivate()
if (m_fd &= 0)
QT_CLOSE(m_fd);
void QWSLinuxInputMousePrivate::enable(bool on)
if (m_notify)
m_notify-&setEnabled(on);
void adjuest(int* pX,int* pY)
//* pX = 1280.0f / 1248 * (2272 - *pX); // 中间版本
////* pY = 720.0f / 700 * (*pY - 1030);
////* pX = (int)(1280.0f / 4062 * (*pX - 7)); // 最旧版本
////* pY = (int)(720.0f / 4071 * (*pY));
*pX = (int)((*pX)*50);
*pY = (int)((*pY)*720.0f/4080);
////* pX = (int)((*pX)*95); // 最新版本
////* pY = (int)((*pY)*720.0f/4095);
void QWSLinuxInputMousePrivate::readMouseData()
if (!qt_screen)
struct ::input_event buffer[32];
int n = 0;
static bool setXflag = 0;
static bool setYflag = 0;
n += QT_READ(m_fd, reinterpret_cast&char *&(buffer) + n, sizeof(buffer) - n);
if (n == 0) {
qWarning("Got EOF from the input device.");
} else if (n & 0 && (errno != EINTR && errno != EAGAIN)) {
qWarning("Could not read from input device: %s", strerror(errno));
} else if (n % sizeof(buffer[0]) == 0) {
n /= sizeof(buffer[0]);
for (int i = 0; i & ++i) {
struct ::input_event *data = &buffer[i];
bool unknown =
if (data-&type == EV_ABS) {
if (data-&code == ABS_X && !setXflag) {
m_x = data-&
setXflag = 1;
} else if (data-&code == ABS_Y && !setYflag) {
m_y = data-&
setYflag = 1;
} else if (data-&type == EV_SYN && data-&code == SYN_REPORT && setXflag && setYflag) {
adjuest(&m_x, &m_y);
printf("########### X=%d Y=%d\n", m_x, m_y);
QPoint pos(m_x, m_y);
//pos = m_handler-&transform(pos);
//m_handler-&limitToScreen(pos);
setButton(3);
m_handler-&mouseChanged(pos, m_buttons);
setXflag = setYflag = 0;
setButton(0);
usleep(1000);
m_handler-&mouseChanged(pos, m_buttons);
} else if (data-&type == EV_MSC && data-&code == MSC_SCAN) {
// kernel encountered an unmapped key - just ignore it
if (unknown) {
qWarning("unknown mouse event type=%x, code=%x, value=%x", data-&type, data-&code, data-&value);
QT_END_NAMESPACE
#include "qmouselinuxinput_qws.moc"
&&&&推荐文章:
【上篇】【下篇】二次元同好交流新大陆
扫码下载App
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
阅读(1089)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
loftPermalink:'',
id:'fks_',
blogTitle:'浅谈触摸屏与QT/E(转)',
blogAbstract:'
我下面讲的主要针对qte3! 我相信很多朋友都碰到过如下问题: 1.&&&&&&& 买来的开发板上是qt2,想升级到qt3或者4。 2.&&&&&&& 升级好办,网上的文章一大把,但是,涉及到一些细节就难办了,关键是摸不着头脑,特别对于初学者,例如如何让qte支持触摸屏,这对于初学者是一件很难琢磨的事。 今天,我只讲触摸屏的故事。如果您是高手请绕道,呵呵! 注:驱动程序,对于这个我不废话,现在从任意开发板上自带的驱动程序中copy的都能用啦呵呵! 首先,讲讲qte的输入,可以是鼠标,触摸屏,标准键盘和自定义键盘,有关自定义键盘,我下次给大家讲。 ',
blogTag:'',
blogUrl:'blog/static/',
isPublished:1,
istop:false,
modifyTime:0,
publishTime:2,
permalink:'blog/static/',
commentCount:0,
mainCommentCount:0,
recommendCount:0,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'',
hmcon:'0',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}Taishan qt 鼠标事件的处理,可以在linux上编译,并运行 -Unix program 238万源代码下载-
&文件名称: Taishan
& & & & &&]
&&所属分类:
&&开发工具: Visual C++
&&文件大小: 10613 KB
&&上传时间:
&&下载次数: 2
&&提 供 者:
&详细说明:qt 鼠标事件的处理,可以在linux上编译,并运行-mouse event
文件列表(点击判断是否您需要的文件,如果是垃圾请在下面评价投诉):
&&Taishan&&.......\Debug&&.......\.....\Resources&&.......\.....\.........\fileconfig&&.......\.....\.........\..........\keyConf.xml&&.......\.....\.........\..........\submenuConf.xml&&.......\.....\.........\img&&.......\.....\.........\...\bg_top01.jpg&&.......\.....\.........\...\bg_top02.jpg&&.......\.....\.........\...\btn_game_left_on.gif&&.......\.....\.........\...\btn_left.gif&&.......\.....\.........\...\icon_game_3d.png&&.......\.....\.........\...\icon_game_3d1.png&&.......\.....\.........\...\icon_game_qlc.png&&.......\.....\.........\...\icon_game_qlc1.png&&.......\.....\.........\...\icon_game_ssc.png&&.......\.....\.........\...\icon_game_ssc1.png&&.......\.....\.........\...\icon_game_ssq.png&&.......\.....\.........\...\icon_game_ssq1.png&&.......\.....\.........\...\icon_game_xync.png&&.......\.....\.........\...\icon_game_xync1.png&&.......\.....\.........\...\menu_data.png&&.......\.....\.........\...\menu_data1.png&&.......\.....\.........\...\menu_data_on.png&&.......\.....\.........\...\menu_detect.png&&.......\.....\.........\...\menu_detect1.png&&.......\.....\.........\...\menu_detect_on.png&&.......\.....\.........\...\menu_game.png&&.......\.....\.........\...\menu_game1.png&&.......\.....\.........\...\menu_game_on.png&&.......\.....\.........\...\menu_search.png&&.......\.....\.........\...\menu_search1.png&&.......\.....\.........\...\menu_search_on.png&&.......\.....\.........\...\menu_setting.png&&.......\.....\.........\...\menu_setting1.png&&.......\.....\.........\...\menu_setting_on.png&&.......\.....\.........\...\menu_update.png&&.......\.....\.........\...\menu_update_on.png&&.......\.....\Taishan.AppForm.exe&&.......\.....\Taishan.AppForm.ilk&&.......\.....\Taishan.AppForm.pdb&&.......\.....\Taishan.AppForm.suo&&.......\.....\Taishan.CoreLib.lib&&.......\.....\Taishan.CoreLib.pdb&&.......\.....\Taishan.TakenCoreLib.dll&&.......\.....\Taishan.TakenCoreLib.ilk&&.......\.....\Taishan.TakenCoreLib.lib&&.......\.....\Taishan.TakenCoreLib.pdb&&.......\Release&&.......\.......\Resources&&.......\.......\.........\fileconfig&&.......\.......\.........\..........\keyConf.xml&&.......\.......\.........\..........\submenuConf.xml&&.......\.......\.........\img&&.......\.......\.........\...\bg_top01.jpg&&.......\.......\.........\...\bg_top02.jpg&&.......\.......\.........\...\btn_game_left_on.gif&&.......\.......\.........\...\btn_left.gif&&.......\.......\.........\...\icon_game_3d.png&&.......\.......\.........\...\icon_game_3d1.png&&.......\.......\.........\...\icon_game_qlc.png&&.......\.......\.........\...\icon_game_qlc1.png&&.......\.......\.........\...\icon_game_ssc.png&&.......\.......\.........\...\icon_game_ssc1.png&&.......\.......\.........\...\icon_game_ssq.png&&.......\.......\.........\...\icon_game_ssq1.png&&.......\.......\.........\...\icon_game_xync.png&&.......\.......\.........\...\icon_game_xync1.png&&.......\.......\.........\...\menu_data.png&&.......\.......\.........\...\menu_data1.png&&.......\.......\.........\...\menu_data_on.png&&.......\.......\.........\...\menu_detect.png&&.......\.......\.........\...\menu_detect1.png&&.......\.......\.........\...\menu_detect_on.png&&.......\.......\.........\...\menu_game.png&&.......\.......\.........\...\menu_game1.png&&.......\.......\.........\...\menu_game_on.png&&.......\.......\.........\...\menu_search.png&&.......\.......\.........\...\menu_search1.png&&.......\.......\.........\...\menu_search_on.png&&.......\.......\.........\...\menu_setting.png&&.......\.......\.........\...\menu_setting1.png&&.......\.......\.........\...\menu_setting_on.png&&.......\.......\.........\...\menu_update.png&&.......\.......\.........\...\menu_update_on.png&&.......\.......\Taishan.AppForm.exe&&.......\.......\Taishan.CoreLib.dll&&.......\.......\Taishan.CoreLib.lib&&.......\submenuConf.xml&&.......\Taishan.AppForm&&.......\...............\AppForm.vcproj&&.......\...............\AppForm.vcproj.slh-PC.slh.user&&.......\...............\AppForm.vcproj.WWW-AE3E4ED13C6.Administrator.user&&.......\...............\Debug&&.......\...............\.....\BuildLog.htm&&.......\...............\.....\DeviceMainSubForm.obj&&.......\...............\.....\GameFormSsqSingle.obj&&.......\...............\.....\GameMainForm.obj&&.......\...............\.....\InfoMainSubForm.obj&&.......\...............\.....\main.obj
&输入关键字,在本站238万海量源码库中尽情搜索:
&[] - 显示图片,按左右键切换显示的图片。
qt程序,可以在liunx上编译
&[] - qt写的视频播放源码,可以在linux上编译并运行}

我要回帖

更多关于 威纶触摸屏反编译密码 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信