• «
  • 1
  • 2
  • 3
  • »
  • Pages: 1/3     Go
主题 : Qtopia应用程序(led控制)(源码) 复制链接 | 浏览器收藏 | 打印
级别: 骑士
UID: 11942
精华: 1
发帖: 144
金钱: 775 两
威望: 155 点
贡献值: 1 点
综合积分: 308 分
注册时间: 2009-12-25
最后登录: 2022-01-16
楼主  发表于: 2010-01-15 17:14

 Qtopia应用程序(led控制)(源码)

发现网上这种资料不多,但我发现这对初学者尤其重要,我刚刚接触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一下就欧了
[ 此帖被cole3在2010-01-16 10:10重新编辑 ]
Eddy Lau (Sun Boy)
级别: 圣骑士
UID: 11202
精华: 1
发帖: 364
金钱: 1885 两
威望: 380 点
贡献值: 1 点
综合积分: 748 分
注册时间: 2009-11-30
最后登录: 2010-04-12
1楼  发表于: 2010-01-15 20:03
很好!

建议用Qt designer来倉建GUI界面.

延时方面可用sleep() 或usleep()涵数来做会比较凖确点.

  
為什麼生世間上 此間許多哀與傷 為什麼爭鬥不絕 歡欣不永享 
問為何人存隔膜 顏面無真相 問那天可找得到 理想中的烏托幫 
自由,自强,共享,共创。
级别: 论坛版主
UID: 12573
精华: 27
发帖: 8838
金钱: 46490 两
威望: 9298 点
贡献值: 27 点
综合积分: 18216 分
注册时间: 2010-01-09
最后登录: 2019-07-16
2楼  发表于: 2010-01-15 22:08
这哥们很乐观啊,我们以后会编写关于QtE编程方面的文档。
你的程序中可以增加system("/etc/init.d/leds stop")系统调用,以便程序开启时关闭led-player闪灯程序。
不过我们实际提供的qtopia led测试程序并不是使用这个方法,而是通过进程控制函数把led-player进程设置为T,程序退出时再恢复。
新手如何向我们反馈有效的信息,以便解决问题,见此贴:
http://www.arm9home.net/read.php?tid-14431.html

[注]: 此处签名链接仅为指引方向,而非解答问题本身.
级别: 侠客
UID: 9203
精华: 0
发帖: 69
金钱: 590 两
威望: 265 点
贡献值: 0 点
综合积分: 138 分
注册时间: 2009-09-21
最后登录: 2010-03-26
3楼  发表于: 2010-01-15 23:44
看起来 很简单呢。就是不懂
级别: 骑士
UID: 11942
精华: 1
发帖: 144
金钱: 775 两
威望: 155 点
贡献值: 1 点
综合积分: 308 分
注册时间: 2009-12-25
最后登录: 2022-01-16
4楼  发表于: 2010-01-16 10:08

 回 2楼(mindee) 的帖子

哦,原来可以用system("/etc/init.d/leds stop")啊,呵呵
我是先把led-player从启动项里删了,哈哈
级别: 骑士
UID: 11942
精华: 1
发帖: 144
金钱: 775 两
威望: 155 点
贡献值: 1 点
综合积分: 308 分
注册时间: 2009-12-25
最后登录: 2022-01-16
5楼  发表于: 2010-01-16 10:10

 回 1楼(eddylau) 的帖子

谢谢您的建议,sleep()比for()好多了,呵呵
Eddy Lau (Sun Boy)
级别: 圣骑士
UID: 11202
精华: 1
发帖: 364
金钱: 1885 两
威望: 380 点
贡献值: 1 点
综合积分: 748 分
注册时间: 2009-11-30
最后登录: 2010-04-12
6楼  发表于: 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编程方面的文档。

為什麼生世間上 此間許多哀與傷 為什麼爭鬥不絕 歡欣不永享 
問為何人存隔膜 顏面無真相 問那天可找得到 理想中的烏托幫 
失败的原因只有一个,那就是半途而废!
级别: 侠客
UID: 12490
精华: 0
发帖: 56
金钱: 290 两
威望: 58 点
贡献值: 0 点
综合积分: 112 分
注册时间: 2010-01-07
最后登录: 2015-09-28
7楼  发表于: 2010-01-24 12:40
支持原创  
失败的原因只有一个,那就是半途而废!
失败的原因只有一个,那就是半途而废!
级别: 侠客
UID: 12490
精华: 0
发帖: 56
金钱: 290 两
威望: 58 点
贡献值: 0 点
综合积分: 112 分
注册时间: 2010-01-07
最后登录: 2015-09-28
8楼  发表于: 2010-01-25 23:11
如果方便的话希望您的解释下myled.cpp各个头文件的意思
还有关键代码的意义。
呵呵有些地方不知道理解的对不对。
还有关于sleep函数  
有输入参数么
这些函数要在哪里进行查询呢?
有没有类似msdn的工具可以方便查询我们要使用的函数呢?
失败的原因只有一个,那就是半途而废!
失败的原因只有一个,那就是半途而废!
级别: 侠客
UID: 12490
精华: 0
发帖: 56
金钱: 290 两
威望: 58 点
贡献值: 0 点
综合积分: 112 分
注册时间: 2010-01-07
最后登录: 2015-09-28
9楼  发表于: 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")  是开启吧
[ 此帖被douzidouer在2010-01-26 00:13重新编辑 ]
失败的原因只有一个,那就是半途而废!
  • «
  • 1
  • 2
  • 3
  • »
  • Pages: 1/3     Go