1、实验准备

在PC 机D:盘下创建文件夹qt-led,将光盘qt_led_exp 文件夹下的images 文件夹拷贝到E:盘下qt-led 文件夹qt-led 内

2、新建工程

新建一个Empty QT4 Project 工程,如下:

点击:File >>> New File >>> Empty Qt4 xxx

保存到D:盘下,起名叫qt-led,如下所示:

3、添加资源文件(图像)

右键点击工程文件qt_led->add new…->Qt Resource File,如下所示:

指定保存位置D:\qt-led 及文件名images,如下所示:(我的一不小心弄错了目录,成了D:\qt-led\\qt-led)

选择添加到工程,确定会出现如下界面:

点击下方的Add->Add Prefix,添加前缀,将默认值/new/prefix1 改为/,如下:

点击下方的Add->Add Prefix,添加文件,选择images 文件夹下的所有文件,如下:

添加完成后,如下显示:

然后执行”ctrl+s”进行保存。

4、创建UI界面

新建一个UI Add New…->Qt Designer Form,如下所示:

选择widget 模板,如下所示:

设置FORM 的名称为led.ui,保存位置D:\qt-led,如下:

点击窗体,设定大小为800*480,窗体名称更改为Led,如下所示:

添加标签,文本为:led 灯控制实例,objectName 为label;

添加标签,清空文本,objectName 为led1_lb,设置大小为128*128,如下所示:

为标签添加背景图片,右键点击标签,选择Change styleSheet…,如下所示:

选择添加背景图片,如下所示:

选中off.png 图像文件,如下所示:

添加完成以后,标签背景已经改变,如下:

复制另外3 个标签,起名分别为led2_lb 和led3_lb,如下所示:

添加group Box 控件,文本:开关控制,大小600*200,摆放在标签的下方,如下:

添加一个Push Button 按钮控件,文本为点亮,objectName 为led1_on,大小为90*45,
点中按钮,在右侧属性设置中找到icon 项,添加图标文件为on.png,添加后如下显
示:

同样复制另外两个led 控制点亮按钮,objectName 分别为led2_on 和led3_on,如下:

添加一个Push Button 按钮控件,文本为熄灭,objectName 为led1_off,大小为90*45,
点中按钮,在右侧属性设置中找到icon 项,添加图标文件为off.png,添加后如下显
示:

同样复制另外两个led 控制熄灭按钮,objectName 分别为led2_off 和led3_off,如下:

图标下方添加三个标签,起名分别为status_lb1、status_lb2 和status_lb3,如下:

界面设计完成,”ctrl+s”保存:

5、添加头文件

添加一个c++头文件,如下:

起名led.h,保存到D:\qt-led,如下:

编辑内容如下:

#include "led.h"
#include "ui_led.h"
MyLed::MyLed(QWidget *parent) :
QWidget(parent),ui(new Ui::Led)
{
ui->setupUi(this);
ui->led1_lb->setStyleSheet(QString::fromUtf8("background-image:
url(:/images/off.jpg);"));
ui->led2_lb->setStyleSheet(QString::fromUtf8("background-image:
url(:/images/off.jpg);"));
ui->led3_lb->setStyleSheet(QString::fromUtf8("background-image:
url(:/images/off.jpg);"));
connect(ui->led1_on,SIGNAL(clicked()),this,SLOT(on_led1_on_clicked()));
connect(ui->led1_off,SIGNAL(clicked()),this,SLOT(on_led1_off_clicked()));
connect(ui->led2_on,SIGNAL(clicked()),this,SLOT(on_led2_on_clicked()));
connect(ui->led2_off,SIGNAL(clicked()),this,SLOT(on_led2_off_clicked()));
connect(ui->led3_on,SIGNAL(clicked()),this,SLOT(on_led3_on_clicked()));
connect(ui->led3_off,SIGNAL(clicked()),this,SLOT(on_led3_off_clicked()));
fd = open("/dev/leds", );
if (fd < ) {
qDebug("open device /dev/leds");
//exit(1);
}
}
MyLed::~MyLed()
{
delete ui;
::close(fd);
}
void MyLed::changeEvent(QEvent *e)
{
QWidget::changeEvent(e);
switch (e->type()) {
case QEvent::LanguageChange:
ui->retranslateUi(this);
break;
default:
break;
}
}
void MyLed::on_led1_on_clicked()
{
ioctl(fd, LED_IOC_WR_ON, );
ui->status_lb1->setText("LED1 ON");
ui->led1_lb->setStyleSheet(QString::fromUtf8("background-image:
url(:/images/led1.jpg);"));
}
void MyLed::on_led1_off_clicked()
{
ioctl(fd, LED_IOC_WR_OFF, );
ui->status_lb1->setText("LED1 OFF");
ui->led1_lb->setStyleSheet(QString::fromUtf8("background-image:
url(:/images/off.jpg);"));
}
void MyLed::on_led2_on_clicked()
{
ioctl(fd, LED_IOC_WR_ON, );
ui->status_lb2->setText("LED2_ON");
ui->led2_lb->setStyleSheet(QString::fromUtf8("background-image:
url(:/images/led2.jpg);"));
}
void MyLed::on_led2_off_clicked()
{
ioctl(fd, LED_IOC_WR_OFF, );
ui->status_lb2->setText("LED2 OFF");
ui->led2_lb->setStyleSheet(QString::fromUtf8("background-image:
url(:/images/off.jpg);"));
}
void MyLed::on_led3_on_clicked()
{
ioctl(fd, LED_IOC_WR_ON, );
ui->status_lb3->setText("LED3 ON");
ui->led3_lb->setStyleSheet(QString::fromUtf8("background-image:
url(:/images/led3.jpg);"));
}
void MyLed::on_led3_off_clicked()
{
ioctl(fd, LED_IOC_WR_OFF, );
ui->status_lb3->setText("LED3 OFF");
ui->led3_lb->setStyleSheet(QString::fromUtf8("background-image:
url(:/images/off.jpg);"));
}

完成,”ctrl+s”保存

6、添加源文件

添加一个c++源文件,如下:

起名led.cpp,保存到D:\qt-led,如下:

编辑文本如下:

#include "led.h"
#include "ui_led.h"
MyLed::MyLed(QWidget *parent) :
QWidget(parent),ui(new Ui::Led)
{
ui->setupUi(this);
ui->led1_lb->setStyleSheet(QString::fromUtf8("background-image:
url(:/images/off.jpg);"));
ui->led2_lb->setStyleSheet(QString::fromUtf8("background-image:
url(:/images/off.jpg);"));
ui->led3_lb->setStyleSheet(QString::fromUtf8("background-image:
url(:/images/off.jpg);"));
connect(ui->led1_on,SIGNAL(clicked()),this,SLOT(on_led1_on_clicked()));
connect(ui->led1_off,SIGNAL(clicked()),this,SLOT(on_led1_off_clicked()));
connect(ui->led2_on,SIGNAL(clicked()),this,SLOT(on_led2_on_clicked()));
connect(ui->led2_off,SIGNAL(clicked()),this,SLOT(on_led2_off_clicked()));
connect(ui->led3_on,SIGNAL(clicked()),this,SLOT(on_led3_on_clicked()));
connect(ui->led3_off,SIGNAL(clicked()),this,SLOT(on_led3_off_clicked()));
fd = open("/dev/leds", );
if (fd < ) {
qDebug("open device /dev/leds");
//exit(1);
}
}
MyLed::~MyLed()
{
delete ui;
::close(fd);
}
void MyLed::changeEvent(QEvent *e)
{
QWidget::changeEvent(e);
switch (e->type()) {
case QEvent::LanguageChange:
ui->retranslateUi(this);
break;
default:
break;
}
}
void MyLed::on_led1_on_clicked()
{
ioctl(fd, LED_IOC_WR_ON, );
ui->status_lb1->setText("LED1 ON");
ui->led1_lb->setStyleSheet(QString::fromUtf8("background-image:
url(:/images/led1.jpg);"));
}
void MyLed::on_led1_off_clicked()
{
ioctl(fd, LED_IOC_WR_OFF, );
ui->status_lb1->setText("LED1 OFF");
ui->led1_lb->setStyleSheet(QString::fromUtf8("background-image:
url(:/images/off.jpg);"));
}
void MyLed::on_led2_on_clicked()
{
ioctl(fd, LED_IOC_WR_ON, );
ui->status_lb2->setText("LED2_ON");
ui->led2_lb->setStyleSheet(QString::fromUtf8("background-image:
url(:/images/led2.jpg);"));
}
void MyLed::on_led2_off_clicked()
{
ioctl(fd, LED_IOC_WR_OFF, );
ui->status_lb2->setText("LED2 OFF");
ui->led2_lb->setStyleSheet(QString::fromUtf8("background-image:
url(:/images/off.jpg);"));
}
void MyLed::on_led3_on_clicked()
{
ioctl(fd, LED_IOC_WR_ON, );
ui->status_lb3->setText("LED3 ON");
ui->led3_lb->setStyleSheet(QString::fromUtf8("background-image:
url(:/images/led3.jpg);"));
}
void MyLed::on_led3_off_clicked()
{
ioctl(fd, LED_IOC_WR_OFF, );
ui->status_lb3->setText("LED3 OFF");
ui->led3_lb->setStyleSheet(QString::fromUtf8("background-image:
url(:/images/off.jpg);"));
}

完成“ctrl+s”保存

7、添加 main 函数

新建一个C++源文件,保存为main.cpp,如下:

编辑文本内容:

#include <QtGui/QApplication>
#include "led.h"
#include <QtGui/QApplication>
#include "led.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MyLed w;
w.showFullScreen();
a.setFont(QFont("unifont",));
//w.show();
return a.exec();
}

“ctrl+s”保存

工程已经创建完毕,接下来即是交叉编译、下载测试
8、拷贝工程文件到虚拟机
[root@localhost uptech]# mkdir qt-led/
通过samba 服务将E 盘下的qt-led 文件夹拷贝到虚拟机的/home/uptech/qt-led 目录,
同时将光盘中qt_led_exp 目录下的driver 目录也拷贝到此文件如下:
[root@localhost uptech]# cd qt-led/
[root@localhost qt-led]# ls
driver qt-led
[root@localhost qt-led]#
9、编译
[root@localhost qt-led]# cd qt-led/
[root@localhost qt-led]#
/home/gxj/QT/qt4.6/for_arm/qt-everywhere-opensource-src-4.6.2/bin/qmake -project
[root@localhost qt-led]#
/home/gxj/QT/qt4.6/for_arm/qt-everywhere-opensource-src-4.6.2/bin/qmake
[root@localhost qt-led]#make
10、拷贝到共享目录
[root@localhost qt-led]# cp qt-led /mnt/nfs/Trolltech/Qt-embedded-4.6.2-install/
[root@localhost qt-led]# cp ../driver/s3c-leds.ko
/mnt/nfs/Trolltech/Qt-embedded-4.6.2-install/
[root@localhost qt-led]#
11、挂载
/mnt # mount -o nolock,rsize=4096,wsize=4096 192.168.12.95:/mnt/nfs /mnt/nfs
12、加载驱动
/mnt #cd /mnt/nfs/Trolltech/Qt-embedded-4.6.2-install/

/mnt/nfs/Trolltech/Qt-embedded-4.6.2-install # insmod s3c-leds.ko
13、执行测试程序
/mnt/nfs/Trolltech/Qt-embedded-4.6.2-install # ./export4arm.sh qt-led –qws
即可进行测试

QT 控制LED实验的更多相关文章

  1. 基于Arduino的按键控制LED实验

    I/O 口的意思即为INPUT 接口和OUTPUT 接口,到目前为止我们设计的小灯实验都还只是应用到Arduino 的I/O 口的输出功能,这个实验我们来尝试一下使用Arduino的I/O 口的输入功 ...

  2. Qt小项目之串口助手控制LED

    Qt小项目之串口助手控制LED 前言 最近刚学了一点Qt开发上位机,尝试着做个小软件练练手.查找了很多资料,做了一个简单的串口助手,可以实现串口基本发送和接收功能,支持中文显示,还可以控制STM32开 ...

  3. 【iCore4 双核心板_ARM】例程四:USART实验——通过命令控制LED

    实验原理: 开发板上自带一片CH340芯片,完成本实验电脑需要安装CH340驱动, CH340的TXD连接STM32的GPIO(PXC7),CH340的RXD连接STM32的 GPIO(PC6),通过 ...

  4. 【iCore1S 双核心板_ARM】例程四:USART通信实验——通过命令控制LED

    实验原理: 开发板上自带一片CH340芯片,完成本实验电脑需要安装CH340驱动, CH340的TXD连接STM32的GPIO(PB6),CH340的RXD连接STM32的 GPIO(PB7),通过串 ...

  5. 利用DoHome APP和音箱控制LED灯实验参考步骤

    准备材料: Arduino Uno 一块 Arduino 扩展板        购买链接 DT-06模块一个       购买链接 安卓手机一个 小度音箱一个 小灯珠一个 杜邦线若干 1.DT-06固 ...

  6. [ZigBee] 16、Zigbee协议栈应用(二)——基于OSAL的无线控制LED闪烁分析(下)

    说在前面:上一篇介绍了无线LED闪烁实现的OSAL部分,本篇介绍如何实现无线数据收发及数据处理: 上一篇是用SI跟着流程查看源码,我个人认为以架构的思维去了解代码能让人更清晰 ::ZMain.c程序入 ...

  7. [ZigBee] 13、ZigBee基础阶段性回顾与加深理解——用定时器1产生PWM来控制LED亮度(七色灯)

    引言:PWM对于很多软件工程师可能又熟悉又陌生,以PWM调节LED亮度为例,其本质是在每个周期都偷工减料一些,整体表现出LED欠压亮度不同的效果.像大家看到的七色彩灯其原理也类似,只是用3路PWM分别 ...

  8. 基于arduino UNO R3+ESP8266控制LED灯的开关(无USB转TTL工具实现)

    最近由于项目要求,需要开发物联网云平台,而本人对硬件和通信技术一窍不通,故而选择arduino这一简单单片机来实现学习掌握基础的硬件和通信技术. 下面就是本人通过查阅大佬资料做的一个整合版本的通过手机 ...

  9. 嵌入式Linux学习入门:控制LED灯

    记录自己linux学习过程,让自己能够一直坚持下去 1.原理图分析: nLED_1, nLED_2, nLED_4, 给低电平则对应LED灯亮,高电平则对应LED灯灭, S3C2440芯片GPF4-G ...

随机推荐

  1. HDU 2732 Leapin' Lizards(最大流)

    http://acm.hdu.edu.cn/showproblem.php?pid=2732 题意: 给出n行的网格,还有若干只蜥蜴,每只蜥蜴一开始就在一个格子之中,并且给出蜥蜴每次的最大跳跃长度d. ...

  2. ${user.home} is not working in jenkins windows system

    default setting create m2 in C:\Windows\system32\config\systemprofile change it to <localReposito ...

  3. 16s workfollw

    http://bioconductor.org/packages/devel/bioc/vignettes/metagenomeFeatures/inst/doc/Example_16S_Annota ...

  4. 语义化标签和media媒体查询可以放心使用

    现在的高级浏览器都支持html5,只有IE6-IE8不支持.(下面说的IE均值IE6-IE8) 有两个特性在IE是可以使用的: 1.语义化标签: header(头部) section(区块) foot ...

  5. C#用大石头Xcode做数据底层注意事项

    1.记得添加XCode.dll 和NewLife.Core.dll 2.记得把程序的框架改为 .net Framework4

  6. K-Means算法的收敛性和如何快速收敛超大的KMeans?

    不多说,直接上干货! 面试很容易被问的:K-Means算法的收敛性. 在网上查阅了很多资料,并没有看到很清晰的解释,所以希望可以从K-Means与EM算法的关系,以及EM算法本身的收敛性证明中找到蛛丝 ...

  7. hdu 6144 Arithmetic of Bomb

    Arithmetic of Bomb Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Other ...

  8. Bayes' theorem (贝叶斯定理)

    前言 AI时代的到来一下子让人感觉到数学知识有些捉襟见肘,为了不被这个时代淘汰,我们需要不断的学习再学习.其中最常见的就是贝叶斯定理,这个定理最早由托马斯·贝叶斯提出. 贝叶斯方法的诞生源于他生前为解 ...

  9. 安装win7和ubuntu双系统

    最近买了新的笔记本电脑,发现新买的电脑上面安装的是win7用户版,在网上查了一下这个版本的win7是功能最少的...另外又发现偌大的500G硬盘居然只给分成2个区,每个250...各种不爽,于是决定格 ...

  10. c#常日期转换(转)

    DateTime dt = DateTime.Now; Label1.Text = dt.ToString();//2005-11-5 13:21:25 Label2.Text = dt.ToFile ...