日志分类:QT
2008-09-25,星期四 | 分类:
QT,
转载 | 标签:
QT,
ts,
嵌入式 | 149 views
摘要:本文主要介绍了在嵌入式 Linux 系统下基于Qt/Embeded 的触摸屏驱动的设计,通过对 Linux 设备驱动和Qt/Embedded设备驱动接口的工作原理和机制介绍,并结合大量源代码进行分析,提出了基于Qt/Embedded 的触摸屏驱动的开发方案。 嵌入式 Linux 以其开源性、内核的健壮性和稳定性、可裁减性,以及有着专业的商业公司和世界顶尖的自由软件开发者的支持和维护等各方面优势,吸引了嵌入式系统开发商的目光,成为嵌入式操作系统的新宠。触摸屏由于其友善的人机交互性、操作简单灵活、输入速度快,大大简化了嵌入式系统的输入而被广泛运用。本文介绍了基于嵌入式Linux 系统平台上Qt/Embedded 的触摸屏驱动的设计。该方案已成功运用于工程机械安全仪和电能质量监测仪项目,实现了GUI(图形用户操作接口)界面对触摸屏的支持,并能根据触摸屏的不同进行定制。 1、 Qt/Embedded 简介 Qt/Embedded 是著名的 Trolltech 公司发布的专门面向嵌入式系统的GUI 和应用开发的开发库。它是一种全面的 C++图形界面应用开发架构,继承了Qt 的全部标准 API,提供了比 Xlib 和 XWindows 系统更加紧凑的窗口生成系统,对 FrameBuffer 直接进行操作(见图 1)。完全模块化的设计和高效的编译系统减少了内存的消耗,这些使 Qt/Embedded 成为嵌入式环境 中,功能强大而全面的GUI开发工具。由于Qt/Embedded 的强大功能,被广泛用于各种领域,从消费电子(移 动电话、掌上电脑、机顶盒)到工业控制(医疗成像 设备、 移动信息系统)。 2 、Linux 下的设备驱动基础 Linux 系统主要将设备分成 3 种类型:字符设备、块设备和网络接口。每个模块通常实现其中一种类型, 相应的模块可分为字符模块、块模块和网络模块3种。 然而这种分类方式并不是非常严格,程序员可以构造一个大的模块,在其中实现不同类型的设备驱动程序。为了实现良好的伸缩性和扩展性,通常还要为每个功能创建一个不同的模块。
发表评论 »
2008-09-25,星期四 | 分类:
QT,
转载 | 标签:
QT | 120 views
如果想更改QT生成的object文件的目录的话,其实很简单,只需要在.pro中加入如下两句话即可: CONFIG(release, debug|release):OBJECTS_DIR=releaseCONFIG(debug, debug|release):OBJECTS_DIR=debug 等号后面的参数即为指定目录 来自:http://www.qtcn.org/bbs/read.php?tid=12953
发表评论 »
当你想要过滤一些事件你会选择怎么做?重写类的event事件?写一大堆的if...else来处理?这样确实是可行的,但是如果我想要同时几个类或者几十个类都屏蔽一个事件该怎么办?难道要重写几个几十个的event?当然不用,QT的QObject类中有一个虚函数叫eventFilter,就是专门用来过滤事件的,比如QT中的QShortcut类就是用这种方法实现的,现在,你只需要写一个eventFilter,然后在需要的地方用installEventFilter安装过滤器即可。以下是一个过滤按键的例子:
class KeyPressEater : public QObject
{
Q_OBJECT
...
protected:
bool eventFilter(QObject *obj, ...
发表评论 »
一般我们使用QT的信号与槽的时候都是类似于这样来操作的: connect(okButton, SIGNAL(clicked()), this, SLOT(checkValues())); 其实QT中可以自动连接信号与槽的,只是你的代码符合它的规范即可。 1、要设定对象的objectName,因为QT是通过objectName来指定对象的。 2、要使用以下函数来告诉QT你要启用自动连接功能: void QMetaObject::connectSlotsByName ( QObject * object ) [static] 这样,QT就会把object的所有符合规定的子对象的信号与槽自动连接起来。 3、槽函数要符合如下的命名规范: void on_<widget name>_<signal name>(<signal parameters>); 这样,就可以不需要再去给每个对象作连接了~在大工程中是很可以很大的提高效率的~如下是一个简单的使用样例。
发表评论 »
sqlite简介 sqlite 是一款轻量级的、基于文件的嵌入式数据库,2000年就已经诞生,经过7年多的发展,直到今天已经成为最流行的嵌入式数据库,包括google在内的公司在其桌面软件中亦使用 sqlite 存储用户数据。由此可以看出,已经没有任何理由去怀疑sqlite的稳定性了。 sqlite的优势 1. 免配置,和access一样,只要把数据库文件通过ftp上传到服务器上就可以使用,不需要服务器的额外支持 2. 备份方便,因为只是一个文件,只要复制一份该文件,就能备份整个数据库 3. 虽然是轻量级数据库,但他支持最大 2tb 的单个库文件。 4. 快,无与伦比的快。经过实际测试,在几百万记录的情况下,sqlite的插入和查询速度和 mysql 不分上下,快于 sql server,10倍于 access (但这并不意味着它可以替代 sql server ) 用QT操作sqlite 由于sqlite属于轻量级的数据库,不需要配置,不需要安装,也不需要管理员,所以也就没必要像操作mysql等数据库一样的设置主机,用户和密码了。样例如下:
发表评论 »
一、配置windows下开发环境。 1. Qt 的安装 这个很简单, 去 trolltech 网站自己下载一个 windows 开源版的就好了。然后双击安装, 一路next, 如果问是否需要安装 MinGW, 点是, 然后next下去, 就完成了。 2. MySQL 的安装 我不喜欢安装东西, 所以去 www.mysql.com 下了个非安装版, 直接放到C盘下了。 至此, 安装环境完成。 二、解决 mysql 的 Qt 驱动问题 这个问题困扰了我一些时间, 因为 Qt 安装完后, 没有带 mySQL 的驱动, 写好的程序运行会提示说 “Driver not loaded”。不过还好, 在 src 目录下可以找到 ...
发表评论 »
2008-09-21,星期天 | 分类:
QT,
原创 | 标签:
QT | 355 views
日前一直有人在问QT下如果能够判断两个键同时按下,其实这很简单。这样用法无非就是用在做快捷键之类的东西上。但是要注意的是,不能用一些非功能键来组成快捷键,比如说不能A键+B键,或者1键+2键这样,因为这在技术上是比较难实现的。好了,以下是用QT4判断组合键的一种方法: 判断shift + F
void Window::keyPressEvent(QKeyEvent *e)
{
if (e->modifiers() == Qt::ShiftModifier && e->key() == Qt::Key_F)
{
//pressed
}
}
当然,要想做三个键的组合也很容易,比如说shift + control + F
void Window::keyPressEvent(QKeyEvent *e)
{
if (e->modifiers() == (Qt::ShiftModifier | Qt::ControlModifier) ...
发表评论 »
QT有商业版和免费开源的,但是针对Windows下trolltech 没有提供免费的编译好的二进制库,同时在linux下自带的版本都比较低,fedora6的还使用的是3.*的,所以,自己编译下QT还是有必要的。在linux下面,和其他的一样./configure,make ,make install一路下来就可以了,之后在home的.bashrc中设置一些QT环境变量即可。比较简单。而在windows下安装比较麻烦,尤其对习惯于等待windows把所有东西都准备的很好的windows用户,自己编译库是不习惯的,尤其是QT这样需要配置很多东西的。但是安装完成之后,仔细想下也没有什么了,QT库和其他的Boost,ACE等都一样,就是C++的Dll形式的库而已,我们的工作就是编译出一大堆Dll以及exe工具,仅此而已,如果你编译过简单的dll,估计QT的编译也不是很难理解了。 所以,这里简单的翻译下我安装过程中参考的文档。我的环境是32位的笔记本,Windows XP sp2, VS2005, QT 4.2.3,这里需要注意的是,VS2005没有打补丁,否则编译出错,我没有去试图解决,因为我的没有补丁 :-)原文参考这里:http://www.qtnode.net/wiki/Qt4_with_Visual_Studio
发表评论 »
信号与槽作为QT的核心机制在QT编程中有着广泛的应用,本文介绍了信号与槽的一些基本概念、元对象工具以及在实际使用过程中应注意的一些问题。 QT 是一个跨平台的C++ GUI应用构架,它提供了丰富的窗口部件集,具有面向对象、易于扩展、真正的组件编程等特点,更为引人注目的是目前Linux上最为流行的KDE桌面环境就是建立在QT库的基础之上。QT支持下列平台:MS/WINDOWS-95、98、NT和2000;UNIX/X11-Linux、Sun Solaris、HP-UX、Digital Unix、IBM AIX、SGI IRIX;EMBEDDED-支持framebuffer的Linux平台。伴随着KDE的快速发展和普及,QT很可能成为Linux窗口平台上进行软件开发时的GUI首选。 一、概述 信号和槽机制是QT的核心机制,要精通QT编程就必须对信号和槽有所了解。信号和槽是一种高级接口,应用于对象之间的通信,它是QT的核心特性,也是QT区别于其它工具包的重要地方。信号和槽是QT自行定义的一种通信机制,它独立于标准的C/C++语言,因此要正确的处理信号和槽,必须借助一个称为moc(Meta Object Compiler)的QT工具,该工具是一个C++预处理程序,它为高层次的事件处理自动生成所需要的附加代码。 在我们所熟知的很多GUI工具包中,窗口小部件(widget)都有一个回调函数用于响应它们能触发的每个动作,这个回调函数通常是一个指向某个函数的指针。但是,在 QT中信号和槽取代了这些凌乱的函数指针,使得我们编写这些通信程序更为简洁明了。信号和槽能携带任意数量和任意类型的参数,他们是类型完全安全的,不会像回调函数那样产生core dumps。
发表评论 »