分类: LINUX
2010-01-28 16:05:51
一,前言:为了初步掌握Qt编程,最快的方法是自己写一个Qt应用程序。
耗了两天时间,终于是完成了基于mini2440的LED控制Qt界面,除了开始时弄Qt库的编译,环境的建立有些烦人外,基础性的Qt编程并不算难。 (版本:Qtopia
下面就两种实现方法简单理一下这个流程:(代码见后面附件)
二, 第一种方法借助于Qt有designer完成GUI,比较简单。
2.1,在终端输入designer,就进入GUI设计界面了。
2.2,生成led_base.ui后,手动编辑led_base.ui创建几个connection和slot。
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.5,main函数的实现。先是打开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.2,LedButton的实现,在构造函数中赋初值,并连接信号和槽。LedButton::LedAction()中,当LedArg==4时,控制全亮或全灭。
3.3,main函数,当使用新类LedButton构造对象时,传递特定的初值LedCMD和LedArg,其它的没什么好说的。
|
|