QT工程的创建与GEC6818交叉编译实现LED的亮灭控制

QT工程的创建与GEC6818交叉编译实现LED的亮灭控制

本片文章涉及1.使用QT实现简单的helloword的程序(包括QT工程的创建)
2.使用QT设计按钮对LED的亮灭进行控制(进行交叉编译)
使用环境:
ubantu16
QT5.7
开发板GEC6818
完整代码在文章末尾可以下载,包括LED的驱动程序

一. make时报错

如果qmake报错时,可尝试执行
报错信息

qmake编译错误:could not exec ‘/usr/lib/x86_64-linux-gnu/qt4/bin/qmake’: No such file or directory

sudo apt-get install qt5-default qtcreator 

二、使用QT创建一个简单helloword的应用

step1: 点击创建一个新的项目

在这里插入图片描述

打开QT5.7后可以看到上图所示的界面,点击【project】–>【New project】

step2: 默认创建一个桌面QT应用

在这里插入图片描述

直接点击【Application】–>【QT widgets Application】,创建一个桌面QT应用,这样初始化就包含一个基于QT设计师的主体框架。

step3: 自定义改工程的名称与路径

在这里插入图片描述

step4: 选择组件

在这里插入图片描述

step5: 创建类,可以更改类的名称

在这里插入图片描述

step6: 工程创建完成

在这里插入图片描述
在这里插入图片描述

step7: 点击[mainWindow.ui]

在这里插入图片描述

打开后可以看到下面界面
在这里插入图片描述

step8: 添加一个Label

在这里插入图片描述

将左边的Label拖动到右边界面,然后自定义更改文本内容。

step9: 运行

在这里插入图片描述

在左下角点击运行(第一个按钮)

运行效果

在这里插入图片描述

这是第一个教程,是不需要进行交叉编译的一个简单的文本显示
接下里我们进行一个简单的QT界面控制LED的亮灭。

三、LED基础实验之QT按钮控制LED的亮灭

我们先来进行QT界面的设计和代码的编写,后面再进行驱动的安装与交叉编译等流程

3.1 LED控制ui的设计

3.1.1 ui 界面的设计

刚开始的QT工程的创建和前面的helloworld是相同的,类的名字可以自拟,但是在选择主界面的窗口基类时,选择 QWidget,如下
在这里插入图片描述

建立好工程之后点进ui设计的界面
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
完成如上操作。

3.1.2 按钮代码编写

选择一个按钮,右键然后转到槽
在这里插入图片描述

可以看到
在这里插入图片描述

我们使用最简单的第一个就行

双击第一个或者单击第一个后点击右下角的ok按钮,就可以看到生成了一个函数
在这里插入图片描述

只要在这个函数中编写相关代码就可以实现,点击open按钮时执行此函数。

我们在这个函数中添加代码

void Led::on_openBtn_clicked()
{
    if (fd < 0)
        return;

    ::ioctl(fd, LED1, 0);
    ::ioctl(fd, LED2, 0);
    ::ioctl(fd, LED3, 0);
    ::ioctl(fd, LED4, 0);
}

另一个close的按键也是如此,写入关闭LED的代码

void Led::on_closeBtn_clicked()
{
    if (fd < 0)
        return;

    ::ioctl(fd, LED1, 1);
    ::ioctl(fd, LED2, 1);
    ::ioctl(fd, LED3, 1);
    ::ioctl(fd, LED4, 1);
}

完整代码

led.h

#ifndef LED_H
#define LED_H

#include <QWidget>

namespace Ui {
class Led;
}

class Led : public QWidget
{
    Q_OBJECT

public:
    explicit Led(QWidget *parent = 0);
    ~Led();

private slots:
    void on_openBtn_clicked();

    void on_closeBtn_clicked();

private:
    Ui::Led *ui;

    int fd;
};

#endif // LED_H

led.cpp


#include "led.h"
#include "ui_led.h"

#include<fcntl.h>
#include <sys/ioctl.h>
#include <unistd.h>

#define TEST_MAGIC 'x'                           //定义幻数
#define TEST_MAX_NR 2                            //定义命令的最大序数

//定义LED的魔幻数
#define LED1 _IO(TEST_MAGIC, 0)
#define LED2 _IO(TEST_MAGIC, 1)
#define LED3 _IO(TEST_MAGIC, 2)
#define LED4 _IO(TEST_MAGIC, 3)


Led::Led(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Led)
{
    ui->setupUi(this);

    fd = -1;

    fd = ::open("/dev/Led", O_RDWR);
    if (fd < 0)
    {
        qDebug("open led dev fail!!");
}
}

Led::~Led()
{
    if (fd > 0)
    {
        ::close(fd);
        fd = -1;
    }


    delete ui;
}

void Led::on_openBtn_clicked()
{
    if (fd < 0)
        return;

    ::ioctl(fd, LED1, 0);
    ::ioctl(fd, LED2, 0);
    ::ioctl(fd, LED3, 0);
    ::ioctl(fd, LED4, 0);
}

void Led::on_closeBtn_clicked()
{
    if (fd < 0)
        return;

    ::ioctl(fd, LED1, 1);
    ::ioctl(fd, LED2, 1);
    ::ioctl(fd, LED3, 1);
    ::ioctl(fd, LED4, 1);
}

编写完代码后保存。

3.2 交叉编译

进入编写的文件的终端
可以进行快捷操作的如下:
在这里插入图片描述

直接在QT软件中右键左边的文件夹,然后选择在此打开终端

然后在终端进行操作

首先需要执行

source /usr/local/Qt-Embedded-5.7.0-env

当然上面的版本需要看自己的环境
在这里插入图片描述

然后进行

qmake

在这里插入图片描述

第三步是执行

make

在这里插入图片描述

make后没有报错就ok

上面三个步骤可以看到如下
在这里插入图片描述

为了保险起见可以再进行一次查看(一般不漏第一步就不用)
使用file + 文件名

file led

在这里插入图片描述

可以看到是arm架构的,如果是x86或其他则表示之前第一步没有进行。

另如果没有执行第一步也没有查看文件,在开发板上执行的时候会报错
在这里插入图片描述

3.3 下载到实验箱、修改权限及运行

3.3.1 传输文件到开发板

使用软件secureCRT软件,使用rx+文件名(可以自定义)进行文件传输
在这里插入图片描述

然后点击Transfer->Send Xmodem

然后选择需要传输的文件,选择我们创建的工程的同名的文件(没有后缀)如下
在这里插入图片描述

3.3.2 加载LED驱动

因为我们需要使用到LED所以我们还需要加载led的驱动。
这里我们也可以使用上面rx的命令加载到同一个目录下,在开发板有led.ko这个驱动的前提下,执行

insmod led.ko

如果显示已经存在就可以先卸载使用如下命令

rmmod led.ko   //删除驱动程序

可以使用下面命令查看驱动

lsmod led.ko  //查看驱动程序
3.3.3 修改权限

由于通过rx命令加载到开发板的文件没有可执行的权限,所以我们需要给他增加可执行权限(x)
可以执行

chmod +x led
3.3.4 运行

通过执行下面指令执行程序(./+文件名)

./led

写在最后:
本文章设计的实验代码在我的github上进行下载:GEC6818_QT_experiments-led.rar

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

写的什么石山代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值