查看: 23395|回复: 22

【懒兔子玩树莓】树莓派2本地开发Qt GUI程序--更新完整工程

  [复制链接]
  • TA的每日心情
    无聊
    2015-8-17 09:38
  • 签到天数: 361 天

    连续签到: 1 天

    [LV.8]以坛为家I

    发表于 2015-3-12 03:38:36 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 懒兔子 于 2015-7-10 18:38 编辑

    写在前面:

    在这段一个人的生活中,想要静下来做点事情。翻来想去,不如读书、学习,借助手里的这两块树莓派,正好如愿。

    于是决定把自己的学习和体验记录下来,一来给自己留作日后的参考,同时也为自己关于使用开源硬件建立快速原型设计平台的构想储备些知识。

    ====================================================================

    1.Qt Creator的安装及配置

    首先通过apt-get安装Qt Creator工具,同时会自动安装4.8版本的Qt-Lib库。

    1. $ sudo apt-get install qtcreator
    复制代码

    通过桌面Menu -> Programming -> QtCreator 启动图形界面。


    由于Qt Creator不能自动识别树莓派上的工具链,因此需要手动添加。点击Tools -> Options打开配置对话框,在Build & Run -> Tool Chains选项卡中点击Add添加GCC工具链,Compiler设置为/usr/bin/gcc,Debugger可设置为/usr/bin/gdb。



    完成设置后我们可以通过一个简单的工程验证Qt是否可用。建立一个Qt Gui Application工程HelloQt。添加一个Label和Push Button。在Button上右键选择go to slot。



    选择Clicked()信号槽(即事件)。



    在on_pushButton_clicked()事件执行函数中添加改变label文字的语句。

    1. void HelloQt::on_pushButton_clicked()
    2. {
    3.     ui->label->setText("Hello Qt!");
    4. }
    复制代码

    保存工程,通过按钮编译工程。这时候还无法直接在Qt Creator中运行编译好的程序,这是因为缺少某些设置,我们稍后再讲。打开工程的编译目录(兔子这里是helloQt-build-embedded-Qt_4_8_2_in_PATH__System__Release),可以发现已经有编译好的可执行文件helloQt,双击执行即可。


    运行效果:



    2.在Qt工程中调用WiringPi

    新建一个Qt Gui Application工程HelloWP。在窗口中添加一个Label和两个Push Button,Button分别命名为LED On和LED Off。为两个Button分别添加Slot。这里通过两个按键控制LED的亮灭状态,通过label显示开关状态。由一个QTimer定时器负责读取并刷新按键的状态。



    将树莓派的BCM_GPIO18连接LED (低电平导通),BCM_GPIO17 连接开关按键(按下时为低电平)。注意这里使用的是Broadcom芯片原始的GPIO定义。


    修改hellowp.cpp文件代码如下:

    1. #include "hellowp.h"
    2. #include "ui_hellowp.h"
    3. #include "wiringPi.h"

    4. helloWP::helloWP(QWidget *parent) :
    5.     QMainWindow(parent),
    6.     ui(new Ui::helloWP)
    7. {   
    8.     ui->setupUi(this);
    9.     wiringPiSetupSys();
    10.     pinMode(18, OUTPUT);
    11.     pinMode(17, INPUT);
    12.     digitalWrite(18, HIGH);

    13.     switch_timer = new QTimer();
    14.     connect(switch_timer, SIGNAL(timeout()), this, SLOT(timerUpDate()));
    15.     switch_timer->start(100);

    16. }

    17. helloWP::~helloWP()
    18. {
    19.     delete ui;
    20. }

    21. void helloWP::timerUpDate()
    22. {
    23.     if(digitalRead(17) == LOW)
    24.         ui->label->setText("Switch is On!");
    25.     else
    26.         ui->label->setText("Switch is OFF!");
    27. }

    28. void helloWP::on_pushButton_clicked()
    29. {
    30.     digitalWrite(18, LOW);
    31. }

    32. void helloWP::on_pushButton_2_clicked()
    33. {
    34.     digitalWrite(18, HIGH);
    35. }
    复制代码

    修改hellowp.h文件代码如下:

    1. #ifndef HELLOWP_H
    2. #define HELLOWP_H

    3. #include <QMainWindow>
    4. #include <QtCore>

    5. namespace Ui {
    6. class helloWP;
    7. }

    8. class helloWP : public QMainWindow
    9. {
    10.     Q_OBJECT
    11.    
    12. public:
    13.     explicit helloWP(QWidget *parent = 0);
    14.     ~helloWP();
    15.    
    16. private slots:
    17.     void on_pushButton_clicked();
    18.     void on_pushButton_2_clicked();
    19.     void timerUpDate();

    20. private:
    21.     Ui::helloWP *ui;
    22.     QTimer *switch_timer;

    23. };

    24. #endif // HELLOWP_H
    复制代码

    此时对工程进行编译会报错,提示找不到wiringPi相关的函数。这是因为我们需要手动添加编译参数,将wiringPi库包含进工程中。

    使用文本编辑器打开helloWP.pro工程文件,在末尾添加:

    LIBS += -lwiringPi


    保存后再编译即可通过。


    下面手动设置执行参数使程序可以在Qt中直接执行。在Projects -> Run Settings选项卡的Run configuration栏中添加Custom Executable,将Executable属性设置为%{buildDir}/helloWP(将helloWP替换为你的工程编译生成的可执行文件即可)。



    此时便可以通过Qt自动编译执行程序了。



    需要注意的是,我们使用的wiringPiSetupSys()初始化函数需要额外export操作才能使用GPIO。这和一般引用了wiringPi的C程序是相同的。如果使用wiringPiSetup()函数则不需要export操作,但是编译好的程序必须在root权限下执行。

    export指令为:

    1. $ gpio export 17 in
    2. $ gpio export 18 out
    复制代码

    我们也可以将这一命令添加到Qt Creator中,使其编译运行时自动执行。只需在Deployment中添加Custom Process即可。如下图:



    程序执行效果如图,按键控制LED亮灭,开关的状态也实时显示在窗口中。


    最后是打包好的工程文件:

    helloWP.rar (3.74 KB, 下载次数: 70)
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2016-8-15 09:30
  • 签到天数: 162 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2015-3-12 08:38:39 | 显示全部楼层
    这东西好
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2020-9-28 10:10
  • 签到天数: 1018 天

    连续签到: 1 天

    [LV.10]以坛为家III

    发表于 2015-3-12 08:42:38 | 显示全部楼层
    原创支持,给力!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2020-2-7 11:49
  • 签到天数: 2193 天

    连续签到: 33 天

    [LV.Master]伴坛终老

    发表于 2015-3-12 13:34:50 | 显示全部楼层
    顶一个!写得真详细!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2022-6-22 23:57
  • 签到天数: 943 天

    连续签到: 1 天

    [LV.10]以坛为家III

    发表于 2015-3-12 17:03:33 | 显示全部楼层
    不知道编译的时候流畅否   ,会不会卡
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2015-8-17 09:38
  • 签到天数: 361 天

    连续签到: 1 天

    [LV.8]以坛为家I

     楼主| 发表于 2015-3-12 17:40:25 | 显示全部楼层
    franki 发表于 2015-3-12 17:03
    不知道编译的时候流畅否   ,会不会卡

    编译比较流畅,本地GCC用起来还是很给力的
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2015-3-16 09:20
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2015-3-16 09:20:13 | 显示全部楼层
    之前移植Qt5程序在树莓派上跑,结果程序自动全屏,而且不能调整尺寸,其他功能一切正常,不知道楼主是否搞过?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2015-8-17 09:38
  • 签到天数: 361 天

    连续签到: 1 天

    [LV.8]以坛为家I

     楼主| 发表于 2015-3-18 16:29:56 | 显示全部楼层

    RE: 【一网打尽】【懒兔子玩树莓】树莓派2本地开发Qt GUI程序

    lwd-345285 发表于 2015-3-16 09:20
    之前移植Qt5程序在树莓派上跑,结果程序自动全屏,而且不能调整尺寸,其他功能一切正常,不知道楼主是否搞 ...

    我一直都在用QT4.8啊,没用过QT5。不过你之前都是交叉编译吧,兼容性不好保证,试试本地装上QT5的库来编译运行?
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2015-6-6 01:25:56 | 显示全部楼层
    后面关于利用wiringPi控制LED的程序有问题吧
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2015-8-17 09:38
  • 签到天数: 361 天

    连续签到: 1 天

    [LV.8]以坛为家I

    发表于 2015-6-9 14:57:28 | 显示全部楼层
    qunimadb 发表于 2015-6-6 01:25
    后面关于利用wiringPi控制LED的程序有问题吧

    嗯,那是第一个例子的。第二个例子的工程找不到了。
    配置没几步,用帖子里的代码自己建一个工程就行
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /5 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-12-24 07:43 , Processed in 0.210215 second(s), 33 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.