基于IMX6uLL的车载智能终端开发①
基于iMX6ULL的车载智能终端设计
·
前言:本项目是作为本人26年毕业设计开发,同步更新至2026.4月份吧(暂定)
目前实现了主界面和音乐播放界面以及天气界面
先上效果图
车载智能终端演示视频①
硬件环境:Windows 11 + Vmware 17.5 + 正点原子提供虚拟机 16.04 + QT 12.9
部分参考:https://blog.csdn.net/black_sneak/article/details/131889750
一、.pro文件配置
QT += core gui multimedia network
核心模块(core) 图形用户界面模块(GUI) 网络模块 音频模块
QT集成好的,面向对象编程的好处
二、主界面MainWindow设置
2.1 mainwindouw.h
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
Ui::MainWindow *ui;
musicWindow *music; //音乐类的声明
weather *wea;//天气类的声明
void layoutinit();
void setButtonStyle(QPushButton * button, const QString & filename);
//时间定时器
QTimer *mytime;
private slots:
void show_time(); //lcd时间显示
void on_qqmusbtn_clicked();
void on_weabtn_clicked();
};
2.2 MainWindow.c
通过继承musicWindow类和weather类来实现各界面的切换
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QGuiApplication>
#include <QScreen>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
layoutinit();
music = new musicWindow(this);
wea = new weather(this);
//定时器
mytime = new QTimer(this);
connect(mytime,SIGNAL(timeout()),this,SLOT(show_time()));
mytime->start(); //启动定时器
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::show_time()//时间显示
{
QDateTime t = QDateTime::currentDateTime();
ui->lcdNumber->setDigitCount(25);
ui->lcdNumber->setSegmentStyle(QLCDNumber::Flat);
ui->lcdNumber->display(t.toString("yyyy-MM-dd hh:mm:ss "));
ui->lcdNumber->setStyleSheet("border:none;font-size:45px;color: green;");
}
void MainWindow::setButtonStyle(QPushButton * button, const QString & filename) //设置button的图标
{
button->setFixedSize(190,190);
button->setIcon(QIcon(filename));
button->setIconSize(QSize(button->width(),button->height()));
button->setStyleSheet("background-color:transparent;border:none");
}
void MainWindow::layoutinit() //设置各button的Icon
{
setButtonStyle(ui->qqmusbtn, ":/icon/QQmusic.png");
setButtonStyle(ui->mapbtn, ":/icon/map.png");
setButtonStyle(ui->weabtn, ":/icon/weather.png");
setButtonStyle(ui->mibtn, ":/icon/mi.png");
setButtonStyle(ui->qqvediobtn, ":/icon/QQvedio.png");
/*这种方法好像不可行,手动设置了屏幕大小1000*600*/
// /* 获取屏幕的分辨率,Qt官方建议使用这
// * 种方法获取屏幕分辨率,防上多屏设备导致对应不上
// * 注意,这是获取整个桌面系统的分辨率
// */
// QList <QScreen *> list_screen = QGuiApplication::screens();
// /* 如果是ARM平台,直接设置大小为屏幕的大小 */
//#if __arm__
// /* 重设大小 */
// this->resize(list_screen.at(0)->geometry().width(),
// list_screen.at(0)->geometry().height());
//#else
// /* 否则则设置主窗体大小为800x480 */
// this->resize(800, 480);
//#endif
}
void MainWindow::on_qqmusbtn_clicked() //音乐界面的进入
{
music->show();
this->hide();
}
void MainWindow::on_weabtn_clicked() //天气界面的进入
{
wea->show();
this->hide();
}
三、音乐界面设置
音乐界面是移植正点原子官方例程进行了适当的修改
3.1 musicWindow.h
#ifndef MUSICWINDOW_H
#define MUSICWINDOW_H
#include <QMainWindow>
#include <QMediaPlayer>
#include <QMediaPlaylist>
#include <QPushButton>
#include <QSlider>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QListWidget>
#include <QLabel>
#include <QSpacerItem>
#include <QDebug>
/* 媒体信息结构体 */
struct MediaObjectInfo {
/* 用于保存歌曲文件名 */
QString fileName;
/* 用于保存歌曲文件路径 */
QString filePath;
};
namespace Ui {
class musicWindow;
}
class musicWindow : public QMainWindow
{
Q_OBJECT
public:
explicit musicWindow(QWidget *parent = nullptr);
~musicWindow();
private:
Ui::musicWindow *ui;
private:
/* 媒体播放器,用于播放音乐 */
QMediaPlayer *musicPlayer;
/* 媒体列表 */
QMediaPlaylist *mediaPlaylist;
/* 音乐列表 */
QListWidget *listWidget;
/* 播放进度条 */
QSlider *durationSlider;
/* 音乐播放器按钮 */
QPushButton *pushButton[7];
/* 垂直布局 */
QVBoxLayout *vBoxLayout[3];
/* 水平布局 */
QHBoxLayout *hBoxLayout[4];
/* 垂直容器 */
QWidget *vWidget[3];
/* 水平容器 */
QWidget *hWidget[4];
/* 标签文本 */
QLabel *label[4];
/* 用于遮罩 */
QWidget *listMask;
/* 音乐布局函数 */
void musicLayout();
/* 主窗体大小重设大小函数重写 */
void resizeEvent(QResizeEvent *event);
/* 媒体信息存储 */
QVector<MediaObjectInfo> mediaObjectInfo;
/* 扫描歌曲 */
void scanSongs();
/* 媒体播放器类初始化 */
void mediaPlayerInit();
private slots:
/* 播放按钮点击 */
void btn_play_clicked();
/* 下一曲按钮点击*/
void btn_next_clicked();
/* 上一曲按钮点击 */
void btn_previous_clicked();
/* 媒体状态改变 */
void mediaPlayerStateChanged(QMediaPlayer::State);
/* 列表单击 */
void listWidgetCliked(QListWidgetItem*);
/* 媒体列表项改变 */
void mediaPlaylistCurrentIndexChanged(int);
/* 媒体总长度改变 */
void musicPlayerDurationChanged(qint64);
/* 媒体播放位置改变 */
void mediaPlayerPositionChanged(qint64);
/* 播放进度条松开 */
void durationSliderReleased();
};
#endif // MUSICWINDOW_H
其他就不放了,可以直接去原子那下
四、天气界面的设置(移植github上)
4.1 weatherdata.h作为天气数据存放
// 存放今天的天气数据
class Today
{
public:
Today()
{
date = "2023-7-28";
city = "河南";
ganmao = "感冒指数";
wendu = " ";
shidu = "0%";
pm25 = 0;
quality = "无数据";
type = "多云";
fl = "2级";
fx = "南风";
high = 30;
low = 18;
}
QString date;
QString city;
QString ganmao;
QString wendu;
QString shidu;
int pm25;
QString quality;
QString type;
QString fl;
QString fx;
int high;
int low;
};
// 存放未来六天的天气数据
class Day
{
public:
Day()
{
date = "2023-7-28";
week = "周五";
type = "多云";
high = 0;
low = 0;
fx = "南风";
fl = "2级";
aqi = 0;
}
QString date;
QString week;
QString type;
int high;
int low;
QString fx;
QString fl;
int aqi;
};
4.2 weathertool.h
代码太多了,放部分代码
class WeatherTool
{
private:
static QMap<QString,QString> mCityMap;
// 初始化城市名和城市编码的map
static void initCityMap()
{
// 1. 读取文件
QString filePath = ":/citycode.json"; //城市编码文件
QFile file(filePath);
file.open(QIODevice::ReadOnly | QIODevice::Text);
QByteArray json = file.readAll();
file.close();
// 2. 解析并写入到map中
QJsonParseError err;
QJsonDocument doc = QJsonDocument::fromJson(json,&err);
if(err.error != QJsonParseError::NoError)
return;
if(!doc.isArray())
return;
QJsonArray cities = doc.array();
for(int i=0; i<cities.size(); i++)
{
QString city = cities[i].toObject().value("city_name").toString();
QString code = cities[i].toObject().value("city_code").toString();
if(code.size()>0)
{
mCityMap.insert(city,code);
}
}
}
4.3 weather.h
#include <QMainWindow>
#include <QLabel>
#include <QMainWindow>
#include <QNetworkAccessManager>
#include <QNetworkReply>
#include <QPushButton>
#include "weatherdata.h"
namespace Ui {
class weather;
}
class weather : public QMainWindow
{
Q_OBJECT
public:
explicit weather(QWidget *parent = nullptr);
~weather();
protected:
//重写事件,实现单击鼠标右键退出程序
void contextMenuEvent(QContextMenuEvent* event);
//获取鼠标按下/移动 时的位置
void mousePressEvent(QMouseEvent* event);
void mouseMoveEvent(QMouseEvent* event);
//用于请求天气数据
void getWeatherInfo(QString cityCode);
//解析天气数据
void parseJson(QByteArray& byteArray);
//更新UI
void updateUI();
//重写父类的eventFilter方法
bool eventFilter(QObject *watched, QEvent *ev);
//绘制高低温曲线
void paintHighCurve();
void paintLowCurve();
//天气类型
void weatherType();
private slots:
void on_btnSearch_clicked();
void on_leCity_returnPressed();
private:
//处理天气数据
void onReplied(QNetworkReply* reply);
private:
Ui::weather *ui;
QMenu* mExitMenu; // 右键退出的菜单
QAction* mExitAct; // 退出的行为
QPoint mOffset; // 窗口移动时,鼠标与窗口左上角的偏移
QNetworkAccessManager* mNetAccessManager; //用于网络请求
Today mToday; //当天的天气数据
Day mDay[6]; //未来六天的天气数据
//控件数组,用于更新UI
//星期和日期
QList<QLabel*> mWeekList;
QList<QLabel*> mDateList;
//天气和天气图标
QList<QLabel*> mTypeList;
QList<QLabel*> mTypeIconList;
//天气污染指数
QList<QLabel*> mAqiList;
//风力和风向
QList<QLabel*> mFxList;
QList<QLabel*> mFlList;
QMap<QString,QString> mTypeMap;
};
- .ui界面设置
界面做了适当修改,增加了返回按钮,删除了对于鼠标的操作
加入鼠标操作后会使界面在屏幕里任意移动

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐
所有评论(0)