几次想照着课本系统地学习Qt,但我发现还是有详细问题驱动时学习比較快。

于是我给自己设定了这个任务:

读取HMC5843的三轴磁场强度值,计算出角度,并把角度用直观形式显示在图形界面上。

这里面涉及到一些问题,接下来就用问答的形式记录一下。

Q1: 搭建Ubuntu-BBB的Qt交叉编译环境、配置触摸屏:

A1: http://blog.csdn.net/wyt2013/article/details/18549415

Q2: 去掉Qt界面的标题栏

A2:

在mainwindow.cpp中MainWindow(QWidget *parent)函数里的ui->setupUI(this);下加入一行就可以

this->setWindowFlags(Qt::FramelessWindowHint);

Q3: 去掉鼠标指针。保留触摸操作

A3:

首先include <QWSServer>
然后在mainwindow.cpp中MainWindow(QWidget *parent)函数里的ui->setupUI(this);下加入一行就可以

QWSServer::setCursorVisible(false);

Q4: 在Qt中实现定时中断

A4:

使用QTimer。

在mainwindow.cpp中构造函数MainWindow(QWidget *parent)里的ui->setupUI(this);下加入

    QTimer *timer = new QTimer(this);connect(timer,SIGNAL(timeout()),this,SLOT(timerUpDate()));timer->start(T);

这样就设定好了一个周期为T毫秒的类似定时中断的东西。每过T毫秒就会触发一次timerUpDate()函数。

别忘了在MainWindow类中加入timerUpDate()函数声明:

private slots:void timerUpDate();

然后就是编写timerUpDate()函数体了。

注意假设函数体内做的事情耗时超过了定时周期T,Qt不会像单片机的定时中断那样挂掉,而是会尽可能完毕每次任务,导致总体定时周期延长。

我这里就在这个函数中实现了定时读取I2C设备的数值,并更新各个UI元素。

Q5: 怎样測试函数运行时间

A5:

使用gettimeofday()函数。

#include<stdio.h>
#include<sys/time.h>
#include<unistd.h>int main()
{struct  timeval start;struct  timeval end;unsigned  long diff;gettimeofday(&start,NULL);//Put things you want to test here.gettimeofday(&end,NULL);diff = 1000000 * (end.tv_sec-start.tv_sec)+ end.tv_usec-start.tv_usec;printf("It took %ld us.\n",diff);return 0;
}

Q6: 怎样画直线图形

A6:

用QPainter。

首先引用头文件

#include <QPainter>
#include <QPointF>

在.h文件里加入声明

private:void paintEvent(QPaintEvent *);

然后在函数里实现画图

void MainWindow::paintEvent(QPaintEvent *)
{QPainter painter(this);QPen pen;pen.setColor(Qt::darkRed);painter.setPen(pen);static const QPointF points[4] = {QPointF(-50, 0), QPointF(50, 10), QPointF(50, -10),QPointF(-50, 0)};painter.drawPolyline(points, 4);
}

屏幕左上角是坐标(0,0)点。

这里就绘制出了我第一个图片中所看到的的三角形。

Q7: 怎样定时刷新图形

A7:

上面给出的是绘制精巧图片的方法。想绘制动态图片的话仅仅须要在前面提到的定时中断timerUpDate()函数中添加一句

update();

Q8: 怎样旋转图形

A8:

能够直接旋转坐标系来实现。首先将坐标系原点平移到旋转中心点,然后旋转坐标系就可以。在paintEvent(QPaintEvent *)中添加

     painter.translate(200,160); painter.rotate(dir);

Q9: 怎样绘制波形图

A9:

使用QPainterPath。

在.h文件里加入定义 QPainterPath path;
在paintEvent中使用例如以下三行:

this->path.lineTo(num,-dir/4);
painter.translate(300-num,180);
painter.drawPath(this->path);

这里num是一个每次定时中断都会自增的变量。

所以lineTo(num,-dir/4);会绘制历史上全部的线,以及绘制近期一个端点和(num,-dir/4)这个坐标的连线。

translate(300-num,180);将坐标每次都向左平移一个单位。

Q10: 怎样加入退出程序button

A10:

在图形界面拖放一个PushButton,右键点击之。选择"Go to slot",然后选择第一个clicked()。这时Qt creator会自己主动跳到void MainWindow::on_pushButton_clicked()函数中。在里面加入:

    QApplication* app;app->quit();

调试时建议用这个button退出程序,而非使用Qt creator上的停止button。由于有时停止button会失效,然后就仅仅能重新启动BBB了。

完整的源码放到了我的github里。欢迎參考

https://github.com/wytalfred/Beaglebone-magnetometer-Qt-display

https://github.com/wytalfred/beaglebone-mag-scope

转载于:https://www.cnblogs.com/llguanli/p/7216805.html

我的嵌入式Qt开发第一课——基于BBB和hmc5843三轴电子罗盘相关推荐

  1. Ubuntu下嵌入式Qt开发环境配置全攻略

    本文以友善之臂的Mini6410嵌入式开发板为目标板,介绍ubuntu 12.04系统下,配置嵌入式Qt开发工具的过程.本文中介绍的工具.大部分步骤和脚本来自开发板附带资料光盘,但其默认配置环境为老旧 ...

  2. Ubuntu20.04下 嵌入式 Qt 开发环境的搭建(适用于Tiny6410)

    Ubuntu 下 Tiny6410 嵌入式 Qt 开发环境的搭建 目录导航 Ubuntu 下 Tiny6410 嵌入式 Qt 开发环境的搭建 前言 1.安装前的准备工作 2.安装交叉编译器 3.安装t ...

  3. 嵌入式Qt开发环境搭建

    嵌入式Qt开发环境搭建 系统基础环境 系统更新 sudo apt update sudo apt upgrade sudo apt autoremove 安装常用软件 # 安装vim sudo apt ...

  4. 测试学开发——第一课:java学习路程

    测试学开发--第一课:java学习路程

  5. 快速上手,教你开发第一个基于 AutoML 的量化投资决策应用

    投资决策是对各种投资方案进行综合分析,选出最佳方案的过程.面对网络上盈千累万的市场信息,如何充分地对信息进行选择.利用,做出最佳决策,是无数投资决策者亟待解决的问题.基于AI的投资决策支持系统能使决策 ...

  6. 嵌入式Qt开发中配置文件的尝试——TOML

    嵌入式Qt开发中配置文件的尝试--TOML 1 起因 2 关于 QSetting 3 重新寻找方案 TOML 3.1 TOML 初体验 4 后话 1 起因 在大多数项目中,系统启动时都需要读取一份配置 ...

  7. 嵌入式Qt 开发一个视频播放器

    上篇文章:嵌入式 Qt开发一个音乐播放器,使用Qt制作了一个音乐播放器,并在OK3568开发板上进行了运行测试,实际测试效果还不错. 本篇继续来实现一个Qt视频播放器软件,可以实现视频列表的显示与选择 ...

  8. 最新linux伺服控制,基于ARM Linux的三轴伺服控制系统人机界面设计 毕设

    基于ARM Linux的三轴伺服控制系统人机界面设计 毕设 洛阳理工学院毕业设计(论文) 基于ARM+Linux的三轴伺服控制系统人机界面设计 摘要 现代计算机技术的产业革命,将世界经济从资本经济带入 ...

  9. 基于arm的嵌入式QT开发(课程设计)

    一. 项目要求 配置QT5.7基于x86及arm 等两种CPU架构的调试及开发环境: 移植arm编译后的QT5.7及屏幕校准工具tslib1.4至CORTEX ARM9实验平台: 开发基于QT5.7的 ...

最新文章

  1. 将bios还原为默认设置时无法启动windows
  2. ImportError: cannot import name ‘secure_filename‘的解决办法
  3. 如何提升个人专业能力
  4. Felx布局基础教程
  5. 神经网络的迭代次数是一个线性的变量吗?
  6. mysql o转数字排序_mysql学习,字符串转成数字并比较排序
  7. 【SSM】基于注解@Controller的控制器
  8. wgn和awgn函数
  9. 助力双十一,促销海报设计模板收好!
  10. 为提升 DCP 传输效率,阿里工程师竟然这样做!
  11. 安装选择Arduino Leonardo新手入门体验
  12. 软件公司是如何招聘人才的?
  13. MySQL5.5安装及其配置
  14. 高中学计算机都是学什么,学计算机高中选什么科目
  15. 黑灰对比可以为高大上网站风格代言
  16. wan端口未连接怎么弄_路由器WAN口未连接解决方法,WAN口未连接怎么办
  17. 学了python能找人吗_只学python能找工作吗
  18. 2月第4周榜单丨飞瓜数据B站UP主排行榜(哔哩哔哩平台)发布!
  19. 在线版音乐播放器APP(一)
  20. Docker 安装配置Crowd

热门文章

  1. 基于Linux操作系统UMPC平台明年发布
  2. c++ 容器及list遍历
  3. WPF4.0用tablet实现手写输入(更新XP SP3下也能手写输入方法)
  4. OpenCASCADE:OCCT应用框架OCAF之可视化属性
  5. 计算机运行点是哪个,电脑开始运行在哪里找
  6. 在PC上安装WM5中文版模拟器
  7. Vue计算属性实现成绩单,Vue计算属性
  8. 黑社会交易用计算机,遭遇网络黑社会亲们都是怎么处理的
  9. Alios-Thins教程连载 ①如何搭建阿里开源系统Alios-Things环境,烧录到乐鑫esp8266,打印 HelloWorld 。(附带镜像)
  10. cocos2d-iphone之魔塔20层第二部分