http://www.arm9home.net/simple/index.php?t4354.html发现网上这种资料不多,但我发现这对初学者尤其重要,我刚刚接触Qtopia,编了个小程序,希望大家多多指正批评。
我觉得友善的应用程序不开源会增加我们的好奇心,我想这也是他们的初衷,哈哈
希望大家多多讨论,共同进步……
myled.h
#ifndef _MYLED_H_
#define _MYLED_H_
#include <qwidget.h>
class Myled : public QWidget
{
Q_OBJECT
public:
Myled( QWidget* parent = 0, const char* name = 0, WFlags fl = 0 );
~Myled() {};
public slots: // 自定义的槽
void runled();
private:
void startled();
};
#endif // _MYLED_H_
myled.cpp
#include <qpushbutton.h>
#include <qtopia/qpeapplication.h>
#include <unistd.h>
#include <sys/types.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/ioctl.h>
#include <sys/stat.h>
#include <fcntl.h>
#include "myled.h"
Myled::Myled( QWidget* parent, const char* name, WFlags fl )
{
startled();
}
void Myled::startled()
{
QPushButton* quit = new QPushButton("START", this); //创建按钮
connect(quit, SIGNAL(clicked()), this, SLOT(runled())); //连接槽
}
void Myled::runled()
{
volatile int i, j, k;
int fd=::open("/dev/leds", 0); // 打开设备
for (k=0; k<4; k++)
{
::ioctl(fd, 0, 1);
for (i=0;i<30000;i++)
for (j=0;j<500;j++);
::ioctl(fd, 1, 1);
for (i=0;i<30000;i++)
for (j=0;j<500;j++);
}
::close(fd); // 关闭设备
}
main.cpp
#include "myled.h"
#include <qtopia/qpeapplication.h>
QTOPIA_ADD_APPLICATION("myled",Myled)
QTOPIA_MAIN
myled.pro
CONFIG += qtopiaapp
CONFIG -= buildQuicklaunch
DESTDIR = $(QPEDIR)/bin
HEADERS = myled.h
SOURCES = myled.cpp
SOURCES+=main.cpp
TARGET = myled
myled.desktop
[Desktop Entry]
Comment[]=A LED Program
Exec=myled
Icon=myled
Type=Application
Name=myled
将以上代码放到一个文件夹,然后从hello中copy来build,build一下就欧了
eddylau | 2010-01-15 20:03 | 很好!
建议用Qt designer来倉建GUI界面.
延时方面可用sleep() 或usleep()涵数来做会比较凖确点.
| |
mindee | 2010-01-15 22:08 | 这哥们很乐观啊,我们以后会编写关于QtE编程方面的文档。 你的程序中可以增加system("/etc/init.d/leds stop")系统调用,以便程序开启时关闭led-player闪灯程序。 不过我们实际提供的qtopia led测试程序并不是使用这个方法,而是通过进程控制函数把led-player进程设置为T,程序退出时再恢复。 | |
wujianming | 2010-01-15 23:44 | 看起来 很简单呢。就是不懂 | |
cole3 | 2010-01-16 10:08 | 哦,原来可以用system("/etc/init.d/leds stop")啊,呵呵 我是先把led-player从启动项里删了,哈哈 | |
cole3 | 2010-01-16 10:10 | 谢谢您的建议,sleep()比for()好多了,呵呵 | |
eddylau | 2010-01-16 11:23 | 引用 引用第2楼mindee于2010-01-15 22:08发表的 : 这哥们很乐观啊,我们以后会编写关于QtE编程方面的文档。 你的程序中可以增加system("/etc/init.d/leds stop")系统调用,以便程序开启时关闭led-player闪灯程序。 不过我们实际提供的qtopia led测试程序并不是使用这个方法,而是通过进程控制函数把led-player进程设置为T,程序退出时再恢复。
mindee 果然有料到.
非常期待你们关于QtE编程方面的文档。
| |
douzidouer | 2010-01-24 12:40 | 支持原创 | |
douzidouer | 2010-01-25 23:11 | 如果方便的话希望您的解释下myled.cpp各个头文件的意思 还有关键代码的意义。 呵呵有些地方不知道理解的对不对。 还有关于sleep函数 有输入参数么 这些函数要在哪里进行查询呢? 有没有类似msdn的工具可以方便查询我们要使用的函数呢? | |
douzidouer | 2010-01-25 23:47 | 引用 引用第2楼mindee于2010-01-15 22:08发表的 : 这哥们很乐观啊,我们以后会编写关于QtE编程方面的文档。 你的程序中可以增加system("/etc/init.d/leds stop")系统调用,以便程序开启时关闭led-player闪灯程序。 不过我们实际提供的qtopia led测试程序并不是使用这个方法,而是通过进程控制函数把led-player进程设置为T,程序退出时再恢复。
mindee
我发现在 /etc/init.d/leds 这个路径下的系统调用没法停止leds 而是在 /etc/rc.d/init.d/leds 这个系统调用可以停止leds
另外问下 system("/etc/rc.d/init.d/leds stop") 是停止 那system("/etc/rc.d/init.d/leds start") 是开启吧 | |
eddylau | 2010-01-26 10:31 | 引用 引用第8楼douzidouer于2010-01-25 23:11发表的 : 如果方便的话希望您的解释下myled.cpp各个头文件的意思 还有关键代码的意义。 呵呵有些地方不知道理解的对不对。 还有关于sleep函数 有输入参数么 .......
sleep(5) => 5 seconds
usleep(5) => 5 micro seconds
you can get more info about sleep by :
#man 3 sleep
or
#info sleep
| |
cole3 | 2010-01-31 10:11 | led.c的头文件,前两个是qtopia的,后面的是驱动程序用到的 关键代码实际上和测试程序是一样的, | |
cole3 | 2010-01-31 10:13 | 还有就是最好用::open,::ioctl,::close,因为他们可能和qtopia中的函数重名 | |
curay | 2010-01-31 22:30 | 请问楼主:
::ioctl(fd, 0, 1);
这样的的双冒号开头的调用, 是C++的语法么?
以前没有见过
请指教 | |
cole3 | 2010-02-01 12:10 | 呵呵,我也不知道,我是从论坛上,看到别人这么用的 | |
|
wang_ge_whut | 2010-02-03 17:12 | 我终于回来了 | |
gx8828418 | 2010-02-13 10:26 | 分别从西边幸福vcxvcxv | |
gx8828418 | 2010-02-26 20:25 | 楼主,能不能发个QT开发步骤,就是工程的创建过程。 | |
gx8828418 | 2010-02-26 20:26 | 不知道开发过程,很郁闷啊 | |
curay | 2010-02-26 20:34 | 引用 引用第19楼gx8828418于2010-02-26 20:26发表的 : 不知道开发过程,很郁闷啊
开发过程手册上都有 熟读手册再来发问吧 | |
curay | 2010-02-26 20:34 | eddylau兄 我越来越佩服你了 我觉得你越来越神秘了啊 | |
gx8828418 | 2010-02-26 21:01 | 呵呵,可以了,自己解决了。 | |
gx8828418 | 2010-02-26 21:05 | 你的led灯的定义是从0开始还是从1开始的 啊?是GPIO6闪4次? | |
gx8828418 | 2010-02-28 17:32 | | |