Chinaunix首页 | 论坛 | 博客
  • 博客访问: 401018
  • 博文数量: 62
  • 博客积分: 1483
  • 博客等级: 上尉
  • 技术积分: 779
  • 用 户 组: 普通用户
  • 注册时间: 2009-02-24 12:25
文章分类

全部博文(62)

文章存档

2012年(2)

2011年(6)

2010年(6)

2009年(48)

我的朋友

分类: LINUX

2009-12-01 17:46:54

hello.h---------------------------
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include

class myMainWindow : public QWidget
{
    Q_OBJECT
    public:
        myMainWindow();
        ~myMainWindow();
    public slots:
        void bEvent(); //按钮事件
        void getTimeout();
    private:
        QLabel *lb;
        QMovie *dogImg;
        void paintEvent(QPaintEvent *);
        int fd;
        QTimer *wdgTimer;
        QPushButton *b_on1;
        QLCDNumber *lcdnum;
        int timeout;
};
hello.cpp---------------------------
#include "hello.h"

#include
#include
#include
#include
#include
#include
#include
#include "ioctl.h"

#define    WATCHDOG_IOCTL_BASE    'W'
#define    WDIOC_SETTIMEOUT        _IOWR(WATCHDOG_IOCTL_BASE, 6, int)
#define    WDIOC_GETTIMEOUT        _IOR(WATCHDOG_IOCTL_BASE, 7, int)

myMainWindow::myMainWindow()
{
    setMinimumSize(220,280);
    setMaximumSize(220,280);

    b_on1 = new QPushButton("feed",this);
    b_on1->setGeometry(10,180,200,30);
    b_on1->setFont(QFont("Times",15,QFont::Bold));


    lcdnum = new QLCDNumber(this);
    lcdnum->setGeometry(150,110,50,50);
    lcdnum->setSegmentStyle(QLCDNumber::Filled);
    lcdnum->display(0);

    lb = new QLabel(this);
    dogImg = new QMovie("dog.gif");
    lb->setGeometry(30,110,70,48);
    lb->setMovie(*dogImg);
//    dogImg->step(1);
//只能分辨出深色和浅色,所以要想显示浅色的前景色就得将
//背景色弄成深色

    fd = open("/dev/misc/watchdog",O_RDWR);
    if (fd < 0) {
        perror("open device wdg");
        exit(1);
    }
    ioctl(fd,WDIOC_SETTIMEOUT,15); //设置超时15
    ioctl(fd,WDIOC_GETTIMEOUT,&timeout);

    wdgTimer = new QTimer(this); //使用q版定时器,问题就解决了。
    connect(wdgTimer,SIGNAL(timeout()),this,SLOT(getTimeout()));
    wdgTimer->start(1000); //开启
    timeout--;

    connect(b_on1,SIGNAL(clicked()),this,SLOT(bEvent()));
}

myMainWindow::~myMainWindow()
{
    write(fd,"V",1); //停止看门狗
    ::close(fd);
}

void myMainWindow::paintEvent(QPaintEvent *)
{
    QPixmap img1("notice.png");
    img1.setMask(img1.createHeuristicMask());
    QPixmap img3("designed.png");
    img3.setMask(img3.createHeuristicMask());
    QPainter paint;
    paint.begin(this);
    paint.drawPixmap(10,10,img1);
    paint.drawPixmap(10,217,img3);   
    paint.end();
}

void myMainWindow::bEvent()
{
    write(fd,"a",1); //喂狗
    ioctl(fd,WDIOC_GETTIMEOUT,&timeout);
}

void myMainWindow::getTimeout()
{
    wdgTimer->stop();
    lcdnum->display(timeout--);   
    wdgTimer->start(1000);
}

int main(int argc,char **argv)
{
    QApplication a(argc,argv);
    myMainWindow w;
    a.setMainWidget(&w);
    w.show();
    a.exec();
}
源码打包:
http://blogimg.chinaunix.net/blog/upfile2/091201173239.gz


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