Qt--LED

11 篇文章 1 订阅

一、功能介绍

能打开设备文件 进行操作
用label显示灯的两种状态

二、代码

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QVBoxLayout>
#include <QLabel>
#include <QPushButton>
#include <QFile>

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();
/* 属性 */
private:
    QVBoxLayout *vLayout;
    QLabel *labShowLed; // 显示led图片
    QPushButton *btnOnOffLed; // 按键led开灭
//    QFile ledDevFile; // led的设备文件
    bool ledstate; // led的状态

/* 函数 */
private:
   void initWidget(); // 初始化窗口

/* 槽函数 */
private slots:
   void SltBtnOnOffClicked(); // 按键点击槽函数
};
#endif // WIDGET_H

widget.cpp

#include "widget.h"
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QMessageBox>

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
#include <string.h>



Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    initWidget(); // 初始化窗口
//    ledDevFile.setFileName("/dev/gpioled"); // 获取led设备文件
    ledstate = false; // led状态为灭
}

Widget::~Widget()
{

}

/**
 * @brief Widget::initWidget
 * 初始化界面
 */
void Widget::initWidget()
{
    this->setGeometry(0,0,800,480);

    vLayout =  new QVBoxLayout(this);
    labShowLed = new QLabel();
    labShowLed->setPixmap(QPixmap(":/images/led_off.png"));
    btnOnOffLed = new QPushButton("On/Off");

    /* 添加到布局 */
    QHBoxLayout *hLayout = new QHBoxLayout();
    QWidget *hWidget = new QWidget();
    QSpacerItem *hSpacer0 = new QSpacerItem(300, 480, QSizePolicy::Minimum, QSizePolicy::Maximum);
    hLayout->addSpacerItem(hSpacer0);
    hLayout->addWidget(labShowLed);
    hLayout->addSpacerItem(hSpacer0);
    hWidget->setLayout(hLayout);
    vLayout->addWidget(hWidget); // 添加标签
    vLayout->addWidget(btnOnOffLed); // 添加按键


    /* 按键点击槽函数 */
    connect(btnOnOffLed,SIGNAL(clicked()),this,SLOT(SltBtnOnOffClicked()));

}

/**
 * @brief SltBtnOnOffClicked
 * 开关灯 按键点击槽函数
 */
void Widget::SltBtnOnOffClicked()
{

   char const *filename = "/dev/gpioled";  // 可执行文件名
   int fd,ret;  //  fd: 文件句柄 ret:函数操作返回值
   unsigned char databuf[1]; // 缓冲区

   /* 打开LED文件 */
   fd = open(filename, O_RDWR);  // 可读可写
   if(fd < 0){  // 打开文件错误
     QMessageBox::information(this,"提示","打开文件失败");
     ::close(fd); // 关闭文件
     return ;
   }

   // 判断led的状态
   if(ledstate){
       databuf[0] = 0;
       ledstate = false;
       labShowLed->setPixmap(QPixmap(":/images/led_on.png"));
   }
   else{
       databuf[0] = 1;
       ledstate = true;
       labShowLed->setPixmap(QPixmap(":/images/led_off.png"));
   }

   /* 向文件中写入数据 */
   ret = write(fd, databuf, sizeof(databuf));
   if(ret < 0){
      ::close(fd); // 关闭文件
   }else{ // 写入成功

   }

   /* 关闭文件 */
   ::close(fd);


//    if(!ledDevFile.exists()){  // 文件不存在
//        QMessageBox::information(this,"提示","设备文件不存在");
//        return ;
//    }

//    /* 以读写方式打开文件 */
//    if(!ledDevFile.open(QIODevice::ReadWrite)){
//        QMessageBox::information(this,"提示","打开文件失败");
//        return ;
//    }

//    ledstate = !ledstate; // LED状态翻转
//    if(ledstate){ // 开
//        ledDevFile.write("0"); // 写入命令
//        labShowLed->setPixmap(QPixmap(":/images/led_on.png"));
//    }else{ // 关
//        ledDevFile.write("1"); // 写入命令
//        labShowLed->setPixmap(QPixmap(":/images/led_off.png"));
//    }

//    /* 关闭文件 */
//    ledDevFile.close();
}

main.cpp

#include "widget.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();
    return a.exec();
}

三、运行

在这里插入图片描述

在ubuntu上打开会提示文件不存在
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值