Chinaunix首页 | 论坛 | 博客
  • 博客访问: 5878
  • 博文数量: 3
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 2
  • 用 户 组: 普通用户
  • 注册时间: 2013-04-17 20:30
文章分类
文章存档

2013年(3)

我的朋友

分类: LINUX

2013-04-18 21:21:02

一,前言:为了初步掌握Qt编程,最快的方法是自己写一个Qt应用程序。

    耗了两天时间,终于是完成了基于mini2440LED控制Qt界面,除了开始时弄Qt库的编译,环境的建立有些烦人外,基础性的Qt编程并不算难。 (版本:Qtopia2.2.0

下面就两种实现方法简单理一下这个流程:(代码见后面附件)

 

二, 第一种方法借助于Qtdesigner完成GUI,比较简单。

 

2.1,在终端输入designer,就进入GUI设计界面了。

 

2.2,生成led_base.ui后,手动编辑led_base.ui创建几个connectionslot。

 

2.3,设计一个新类LedForm,继承自ui产生的类LedBaseForm,这样我们就可以用ui里创建的控件了。在这个类里新加了几个虚函数,如下:

virtual void LedAction1();

    virtual void LedAction2();

    virtual void LedAction3();

    virtual void LedAction4();

    virtual void LedAction5();

    virtual void LedAction6();

    virtual void LedAction7();

    virtual void LedAction8();

    virtual void LedAction9();

    virtual void LedAction10();

这几个虚函数与ui里面的slot是同名的,根据C++的多态性,当pushbutton控件产生clicked()信号时,会分别由这几个虚函数来响应。

 

2.4,类的实现就比较简单了,基本上就是ioctl()来控制LED的灭与亮。

 

2.5main函数的实现。先是打开LED驱动节点,如果成功,就用上面新类来实例化一个对象。

 

三,第二种方法不使用ui。自己手动完成GUI

 

3.1,同样根据需要设计一个新类LedButton,由QPushButton派生。并加入两个私有成员LedCMD,LedArg,将会在ioctl()时作为参数直接传给驱动程序,这样就不用象上面一样设计多个slot了。

值得注意的是,Q_OBJECT这个宏经常被忘掉,导至编译出问题。

这个类如下:

class LedButton : public QPushButton

{

    Q_OBJECT

public:

    LedButton(const QString&,QWidget *parent,int CMD=0, int Arg=0);

    virtual ~LedButton();

 

private:

    int LedCMD,LedArg; //private members used as IOCTRL

 

public slots:

    void LedAction();

};

 

3.2LedButton的实现,在构造函数中赋初值,并连接信号和槽。LedButton::LedAction()中,当LedArg==4时,控制全亮或全灭。

 

3.3main函数,当使用新类LedButton构造对象时,传递特定的初值LedCMDLedArg,其它的没什么好说的。

 

------------------------------------------
本文乃原创!
转载请注明出处:http://sparklecliz.cublog.cn/
------------------------------------------

        

文件: LedQtInterface.rar
大小: 31KB
下载: 下载

文件: LedControlQt.rar
大小: 40KB
下载: 下载

阅读(767) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~