概要
使用Qt编写上位机是一个非常不错的选择,简单说一下作者的看法:
①Qt采用的是C++,所以在某种程度上与嵌入式设备数据类型兼容,所以嵌入式设备与上位机间的协议定义数据结构等都可以相互套用,
②Qt是跨平台的,所以代码开发一次,多平台运行。
③Qt学习成本低,网上资料很多,基本你遇到的问题,网上都能找到。
对于嵌入式开发者来说,会写上位机可以提高开发效率,比如可以开发抓包工具,日志数据分析,升级(网络升级,串口升级等)
说到升级,那么就有些场景,比如批量升级,某台升级等需求。有这些需求那么就要有对应的UI呈现给用户。所以Qt的自定义委托在这种场景显的尤为重要。
Qt模型视图中的委托
Qt模型视图采用类MVC框架,那什么是MVC框架?
M--模型:负责组织数据
V--试图:负责显示数据
C--控制:负责用户输入
Qt模型视图设计:①视图中集成了处理用户输入的功能,②视图将用户输入作为内部独立的子功能实现
模型视图中的委托:①委托是视图中处理用户输入的部件。②视图可以设置委托对象用于用户输入。③委托对象负责创建和显示用户输入上下文。
Qt 自定义委托--实现批量升级UI
准备工作:下载Qt工具,然后创建一个基类为QMainWindow的工程,并且带ui的。
设计一个ui,一个CheckBox控件和TableView控件
自定义表格中单选框CheckBox委托 -- 创建QRiceButtonDelegate类继承QItemDelegate
重写paint方法和editorEvent方法,其中paint用于绘制,editorEvent用于处理用户输入
单选框其实使用按钮项样式(QStyleOptionButton)绘制。
QRiceButtonDelegate源文件
#include "qricecheckboxdelegate.h" #include#include #include #include #include QRiceCheckBoxDelegate::QRiceCheckBoxDelegate(QObject *parent) : QItemDelegate(parent) { } QRiceCheckBoxDelegate::~QRiceCheckBoxDelegate() { } void QRiceCheckBoxDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { if(QVariant::Bool == index.data(Qt::DisplayRole).type()) //如果数据类型为bool型,才绘制单选宽 { QStyleOptionButton checkBox; checkBox.state = index.data().toBool() ? QStyle::State_On : QStyle::State_Off; //绘制后的默认状态 checkBox.state |= QStyle::State_Enabled; checkBox.rect = option.rect; checkBox.rect.setX(option.rect.x() + option.rect.width()/2 - 6); //设置在表格中的显示位置 QApplication::style()->drawControl(QStyle::CE_CheckBox, &checkBox, painter); // 绘制 } else { QItemDelegate::paint(painter, option, index); } } bool QRiceCheckBoxDelegate::editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &index) { bool ret = true; if(QVariant::Bool == index.data().type()) { QMouseEvent* mouse = dynamic_cast (event); if( (NULL != mouse) && (QEvent::MouseButtonPress == mouse->type()) && (option.rect.contains(mouse->pos())) ) { model->setData(index, !index.data().toBool(), Qt::DisplayRole); // 更新模型数据 } } else { ret = QItemDelegate::editorEvent(event, model, option, index); } return ret; }
QRiceButtonDelegate头文件
#ifndef QRICECHECKBOXDELEGATE_H #define QRICECHECKBOXDELEGATE_H #includeclass QRiceCheckBoxDelegate : public QItemDelegate { Q_OBJECT public: explicit QRiceCheckBoxDelegate(QObject *parent = nullptr); ~QRiceCheckBoxDelegate(); void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const; bool editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &index); signals: }; #endif // QRICECHECKBOXDELEGATE_H
自定义表格中进度条ProgressBar委托 -- 创建QRiceProgressBarDelegate类继承QItemDelegate
重写paint方法和editorEvent方法,其中paint用于绘制,editorEvent用于处理用户输入
进度条其实采用进度条项样式(QStyleOptionProgressBar)绘制。
QRiceProgressBarDelegate源文件
void QRiceProgressBarDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { int progress = index.data(Qt::DisplayRole).toInt(); QStyleOptionProgressBar progressBar; progressBar.minimum = 0; //设置进度条最小值 progressBar.maximum = 100; //设置进度条最大值 progressBar.progress = progress; //设置绘制后的数值 progressBar.rect = option.rect.adjusted(4, 4, -4, -4); //设置进度条的大小 progressBar.textVisible = true; //设置进度条显示数值 progressBar.textAlignment = Qt::AlignCenter; //设置进度条数值显示位置 progressBar.text = QString("%1%").arg(progress); //设置进度条数值显示 QApplication::style()->drawControl(QStyle::CE_ProgressBar, &progressBar, painter); // 绘制 } bool QRiceProgressBarDelegate::editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &index) { bool ret = true; if(QEvent::MouseButtonDblClick != event->type()) { ret = QItemDelegate::editorEvent(event, model, option, index); } return ret; }
QRiceProgressBarDelegate头文件
#ifndef QRICEPROGRESSBARDELEGATE_H #define QRICEPROGRESSBARDELEGATE_H #includeclass QRiceProgressBarDelegate : public QItemDelegate { Q_OBJECT public: explicit QRiceProgressBarDelegate(QObject *parent = nullptr); ~QRiceProgressBarDelegate(); void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const; bool editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &index); signals: }; #endif // QRICEPROGRESSBARDELEGATE_H
自定义表格中按纽Button委托 -- 创建QRiceButtonDelegate类继承QItemDelegate
重写paint方法和editorEvent方法,其中paint用于绘制,editorEvent用于处理用户输入
按钮其实按钮项样式(QStyleOptionButton)绘制。
QRiceButtonDelegate源文件
void QRiceButtonDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { QStyleOptionButton *buttonStyle = buttonDelegate.value(index); if(!buttonStyle) { buttonStyle = new QStyleOptionButton(); // 创建按钮项样式 buttonStyle->text = "Update"; // 设置按钮中显示的内容 buttonStyle->state |= QStyle::State_Enabled; // 设置按钮中的状态 (const_cast(this))->buttonDelegate.insert(index, buttonStyle); } buttonStyle->rect = option.rect.adjusted(4, 4, -4, -4); //设置按钮的大小 painter->save(); if (option.state & QStyle::State_Selected) { painter->fillRect(option.rect, option.palette.highlight()); } painter->restore(); QApplication::style()->drawControl(QStyle::CE_PushButton, buttonStyle, painter); //绘制 } bool QRiceButtonDelegate::editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &index) { Q_UNUSED(model); Q_UNUSED(option); QMouseEvent *mouseEvent = (QMouseEvent *)event; if(event->type() == QEvent::MouseButtonPress) // 按钮按下,设置按钮的状态 { if(buttonDelegate.contains(index)) { QStyleOptionButton *buttonStyle = buttonDelegate.value(index); if(buttonStyle->rect.contains(mouseEvent->x(), mouseEvent->y())) { buttonStyle->state |= QStyle::State_Sunken; } } } if(event->type() == QEvent::MouseButtonRelease) // 按钮松开,设置按钮的状态 { if(buttonDelegate.contains(index)) { QStyleOptionButton *buttonStyle = buttonDelegate.value(index); if(buttonStyle->rect.contains(mouseEvent->x(), mouseEvent->y())) { buttonStyle->state &= (~QStyle::State_Sunken); showMsg(tr("btn1 column %1").arg(index.row())); // 松开弹出消息框,显示对应行号 } } } return true; } void QRiceButtonDelegate::showMsg(QString str) { QMessageBox msg; msg.setText(str); msg.exec(); }
QRiceButtonDelegate头文件
#ifndef QRICEBUTTONDELEGATE_H #define QRICEBUTTONDELEGATE_H #includeclass QRiceButtonDelegate : public QItemDelegate { Q_OBJECT public: explicit QRiceButtonDelegate(QObject *parent = nullptr); ~QRiceButtonDelegate(); void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const; bool editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &index); signals: private: void showMsg(QString str); private: typedef QMap collButtons; collButtons buttonDelegate; }; #endif // QRICEBUTTONDELEGATE_H
创建一个自定义QRiceTableView类继承QTableView类
构造方法实现:①创建QStandardItemModel模型。②创建单选框委托到视图中。③创建进度条委托到视图第五列中。④创建按钮委托到视图第六列中。⑤设置表格视图的头部。
QRiceTableView::QRiceTableView(QWidget *parent) : QTableView(parent) { horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); tableItemModel = new QStandardItemModel(); setModel(tableItemModel); tableCheckBoxDelegate = new QRiceCheckBoxDelegate(this); setItemDelegate(tableCheckBoxDelegate); tableProgressBarDelegate = new QRiceProgressBarDelegate(this); setItemDelegateForColumn(4, tableProgressBarDelegate); tableButtonDelegate = new QRiceButtonDelegate(this); setItemDelegateForColumn(5, tableButtonDelegate); QStringList tableHeaders; tableHeaders << tr("Select") <setHorizontalHeaderLabels(tableHeaders); } 在QRiceTableView中实现用户使用方法:
方法 说明 int QRiceTableGetRow(void); 获取列表行数 int QRiceTableGetColumn(void); 获取列表列数 void QRiceTableAddItem(int row, struct tableItemInfo *info); 增加一行 void QRiceTableSetProgress(int row, int Progress); 设置某行的进度条 void QRiceTableSetSelect(int row, bool select); 单选框状态设置 bool QRiceTableGetSelect(int row); 单选框状态获取 QString QRiceTableGetString(int row, int column); 获取某行某列的数据 在QRiceTableView中方法代码:
int QRiceTableView::QRiceTableGetRow(void) { return tableItemModel->rowCount(); } int QRiceTableView::QRiceTableGetColumn(void) { return tableItemModel->columnCount(); } void QRiceTableView::QRiceTableAddItem(int row, struct tableItemInfo *info) { QStandardItem* otaDeviceListStandardItem = tableItemModel->invisibleRootItem(); QStandardItem *checkBox = new QStandardItem(); QStandardItem *name = new QStandardItem(); QStandardItem *age = new QStandardItem(); QStandardItem *work = new QStandardItem(); checkBox->setData(false, Qt::DisplayRole); name->setData(info->name, Qt::DisplayRole); age->setData(info->age, Qt::DisplayRole); work->setData(info->work, Qt::DisplayRole); otaDeviceListStandardItem->setChild(row, 0, checkBox); otaDeviceListStandardItem->setChild(row, 1, name); otaDeviceListStandardItem->setChild(row, 2, age); otaDeviceListStandardItem->setChild(row, 3, work); } void QRiceTableView::QRiceTableSetProgress(int row, int Progress) { if(row < tableItemModel->rowCount()) { QModelIndex index = tableItemModel->index(row, 4); tableItemModel->setData(index, Progress, Qt::DisplayRole); } } void QRiceTableView::QRiceTableSetSelect(int row, bool select) { if(row < tableItemModel->rowCount()) { QModelIndex index = tableItemModel->index(row, 0); tableItemModel->setData(index, select, Qt::DisplayRole); } } bool QRiceTableView::QRiceTableGetSelect(int row) { if(row < tableItemModel->rowCount()) { QModelIndex index = tableItemModel->index(row, 0); return index.data(Qt::DisplayRole).toBool(); } return false; } QString QRiceTableView::QRiceTableGetString(int row, int column) { if(row < tableItemModel->rowCount() && column > 0 && column < (tableItemModel->columnCount() - 2)) { QModelIndex index = tableItemModel->index(row, column); return index.data(Qt::DisplayRole).toString(); } return ""; }QRiceTableView头文件:
#ifndef QRICETABLEVIEW_H #define QRICETABLEVIEW_H #include#include #include "qricecheckboxdelegate.h" #include "qriceprogressbardelegate.h" #include "qricebuttondelegate.h" class QRiceTableView : public QTableView { Q_OBJECT public: struct tableItemInfo { QString name; QString age; QString work; }; public: explicit QRiceTableView(QWidget *parent = nullptr); ~QRiceTableView(); signals: public: int QRiceTableGetRow(void); int QRiceTableGetColumn(void); void QRiceTableAddItem(int row, struct tableItemInfo *info); void QRiceTableSetProgress(int row, int Progress); void QRiceTableSetSelect(int row, bool select); bool QRiceTableGetSelect(int row); QString QRiceTableGetString(int row, int column); private: QStandardItemModel *tableItemModel; QRiceCheckBoxDelegate *tableCheckBoxDelegate; QRiceProgressBarDelegate *tableProgressBarDelegate; QRiceButtonDelegate *tableButtonDelegate; }; #endif // QRICETABLEVIEW_H 将UI中的QTableView提升为QRiceTableView:
右击QTableView控件,选择提升为:
填写对应类名,类的头文件相对路径:
点击添加后,然后点击提升按钮,就完成了控件的提升
在mainwindow.cpp中增加测试用例:
在构造方法中,创建两条数据,并且启动一个定时器刷新进度条:
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); setWindowTitle(tr("Rice Delegate")); struct QRiceTableView::tableItemInfo info; info.name = tr("RiceChen"); info.age = tr("18"); info.work = tr("程序员"); ui->tableView->QRiceTableAddItem(0, &info); info.name = tr("米饭"); info.age = tr("20"); info.work = tr("公务员"); ui->tableView->QRiceTableAddItem(1, &info); QTimer * timer = new QTimer(this); connect(timer,&QTimer::timeout,[=](){ static int Progress1 = 0; static int Progress2 = 0; ui->tableView->QRiceTableSetProgress(0, Progress1); ui->tableView->QRiceTableSetProgress(1, Progress2); Progress1 += 1; Progress2 += 2; if(Progress1 > 100) { Progress1 = 0; } if(Progress2 > 100) { Progress2 = 0; } }); timer->start(1000); }界面中全选框的实现:
void MainWindow::on_allCheckBox_clicked() { for(int row = 0; row < ui->tableView->QRiceTableGetRow(); row++) { if(ui->allCheckBox->checkState() == Qt::Checked) { ui->tableView->QRiceTableSetSelect(row, true); } else { ui->tableView->QRiceTableSetSelect(row, false); } } }最终呈现结果:
编辑:黄飞
- 嵌入式开发(46806)
- 上位机(53959)
相关推荐
QT在嵌入式环境的搭建
移植QT5.6到嵌入式开发板(史上最详细的QT移植教程)目前网上的大多数 QT 移植教程还都停留在 qt4.8 版本,或者还有更老的 Qtopia ,但是目前 Qt 已经发展到最新的 5.7 版本了2021-12-24 07:26:22嵌入式QT基础视频教程免费分享!
嵌入式QT基础视频教程免费分享!首先给大家介绍一下QT的简介,Qt 是一个用于桌面系统和嵌入式开发的跨平台应用程序框架。它包括一个直观的API和一个丰富的类库,以及用于GUI开发和国际化的集成工具2017-07-05 13:05:24嵌入式QT是什么?有何功能
嵌入式QT基础视频教程免费分享! 首先给大家介绍一下QT的简介,Qt 是一个用于桌面系统和嵌入式开发的跨平台应用程序框架。它包括一个直观的API和一个丰富的类库,以及用于GUI开发和国际化的集成工具,另外它支持Java™和C++开发。利用它,我们无须重新编写源代码,便可以构建运行在不同桌面操...2021-12-23 07:35:08嵌入式是什么? 嵌入式开发是什么意思?
` 在科技发达的今天,人们对于生活质量也有了更高层次的追求,那就不得不引入嵌入式这项技术了,嵌入式开发被越来越多的人所熟知。那么,究竟什么是嵌入式呢?嵌入式开发是什么意思呢?接下来,小编慢慢跟你聊2018-07-26 15:58:14嵌入式系统是什么?嵌入式开发与传统单片机开发不同
1、嵌入式系统是什么2、嵌入式系统的组成3、嵌入式开发与传统单片机开发不同4、嵌入式应用和就业方向5、学习路线1、嵌入式系统是什么? 嵌入式系统(百度):嵌入式系统是以应用为中心,以计算机技术为2022-02-23 06:02:01嵌入式开发
本帖最后由 gk320830 于 2015-3-7 06:45 编辑 请问大家一下,我是嵌入式开发的菜鸟一枚,请问学习嵌入式开发的过程应该是怎样的?由单片机学起吗?谢谢2013-12-04 22:37:53嵌入式开发与单片机开发的区别是什么
1嵌入式开发就是设计特定功能的计算机系统,手机,mp3、mp4.mp5自动供水系统,洗衣机,油井监控系统等等都是嵌入式系统,形象的说就是开发一种嵌入在一个机器上实现特定功能的一个系统。单片机开发2021-11-03 08:46:02嵌入式开发与单片机之间是什么关系
1嵌入式开发就是设计特定功能的计算机系统,手机,mp3、mp4,mp5,自动供水系统,洗衣机,油井监控系统,等等都是嵌入式系统,形象的说就是开发一种嵌入在一个机器上实现特定功能的一个系统。单片机2018-07-21 14:45:06嵌入式开发与非嵌入式开发的区别
通过初步的学习,了解到嵌入式是在已有的硬件上移植操作系统,在操作系统之上做上层应用开发,在操作系统之下做底层开发。嵌入式开发与非嵌入式开发的区别在于软件的耦合度不同等,众所周知,在单片机的开发中2021-10-27 06:26:01嵌入式开发中的一些硬件相关的概念有哪些
做嵌入式系统开发,经常要接触硬件。做嵌入式开发对数字电路和模拟电路要有一定的了解。这样才能深入的研究下去。下面我们简单的介绍嵌入式开发中的一些硬件相关的概念。2021-02-24 08:56:30嵌入式开发之Qt应用视频教程分享!
嵌入式开发之Qt应用也是我们在学习嵌入式中的一个重要部分,今天楼主在这里给大家分享了关于Qt方面的视频教程,大家可以参考一下,希望能帮助到大家!百度云分享:http://pan.baidu.com/s/1c1YGevI密码:2eim2017-01-03 14:10:02嵌入式开发分为哪4类工程师 嵌入式开发具备哪些技能
。具有单片机、某种或多种32位嵌入式处理器的移植开发能力,熟悉bootloader过程,具有扎实的硬件知识,理解硬件原理图,能独立完成相关硬件驱动调试,能够根据芯片手册编写软件驱动程序。如果涉及到网络设备2018-03-02 11:44:37嵌入式开发培训都要学什么?
等相关知识,学习QT程序开发,进行嵌入式系统程序的调试。学会嵌入式开发的分析问题、解决问题的思维方法,掌握程序设计的基本方法和常用算法。1.嵌入式C语言:C语言是嵌入式领域中重要也是主要的编程语言,通...2021-11-08 06:09:56嵌入式开发学习的三个阶段
、调试器GDB和 Make 项目管理工具,Shell Makefile脚本编写等知识,以及嵌入式开发环境的搭建。 中级嵌入式工程师 经过第一个阶段的学习,你已经可以进行嵌入式开发工作了,但是要进阶依旧2018-11-23 09:28:18嵌入式开发学习路线图
语言是因unix的出现而诞生的,Linux内 核几乎完全是由C语言编写完成的。学习C语言,如果不会用指针,那么就称不上会C语言。做嵌入式开发指针更显得尤为重要,所以做嵌入式开发除了掌握位操 作、限定词2020-12-31 09:47:37嵌入式开发就业方向的问题
近几年来随着物联网的快速发展,嵌入式开发技术在我们的生活中随处可见,目前嵌入式开发工程师在市场上的需求量大,薪资也是水涨船高。上海尚观科技今天主要是想给一些嵌入式开发的初学者们,具体说说嵌入式开发就业方向的问题,大家可以参考下。据悉,目前国内3G核心嵌入式人才不足万人,其中华为约5000-...2021-11-08 07:58:17嵌入式开发工具使用
嵌入式开发工具使用一.实验目的二.实验内容三.预备知识四.实验设备及工具(包括软件调试工具)五.实验步骤5.1 交叉编译工具配置及编译5.2arm-linux-gcc编译工具使用5.3 编写2021-10-28 09:43:20嵌入式开发教程之程序设计与开发维护
干货来了,本文创客学院嵌入式linux培训讲师和学员分享嵌入式程序设计和系统开发与维护的相关知识点。希望对学习嵌入式开发的学员有所帮助。 嵌入式开发教程之程序设计与开发维护: 一、嵌入式2017-05-26 14:59:52嵌入式开发教程哪家好呢?
近年来,随着嵌入式系统产业规模的持续增长,作为IT业的重要新兴产业和经济增长点,发展嵌入式系统产业已经成为了制造向创造转变的突破口,可以说现在对嵌入式开发人才的需求是非常大的,因此很多人通过参加2021-11-08 06:09:02嵌入式开发是什么呢
大家好,我是无际单片机编程的徐工,今天闲暇,抽点时间和大家聊聊关于嵌入式开发的学习。因为爱迪生发明灯泡的故事,自小就在我的内心深处藏了一个自己长大后要成为像爱迪生一样的科学家。一晃好多年过去了,梦想2021-11-05 07:12:06嵌入式开发是什么意思
嵌入式开发就是指在嵌入式操作系统下进行开发,包括在系统化设计指导下的硬件和软件以及综合研发。除暂且分离硬件的EDA研发以外,侧重的就是在一定硬件条件下的系统化设计和软件研发。定义嵌入式开发是指利用2021-10-28 08:35:47嵌入式开发有哪些技巧?
成为一个正式的嵌入式开发工程师是一个艰辛的过程。从规范完善的开发周期到严格执行和系统检查,开发高可靠性嵌入式系统的技术有许多种。本文介绍7个易操作且可以长久使用的技巧,它们对于确保系统更加可靠地运行并捕获异常行为大有帮助。2021-03-17 06:42:40嵌入式开发板有什么功能?
嵌入式开发板是半导体行业分工合作的载体之一,它为开发产品的厂商提供基本的底层硬件、系统和驱动等资源,使得用户不需要再投入人力和时间来完成这些底层的工作(嵌入式微处理器)。从概念上来讲,嵌入式开发2020-03-31 07:57:13嵌入式开发板的学习方法
本文转自:http://www.topeetboard.com 嵌入式知识体系庞大,下面介绍并了解嵌入式开发的体系及学习方法,学习嵌入式开发需要有很好的指引,也就是方法,嵌入式开发学习必须掌握方法2016-03-30 17:21:43嵌入式开发流程
嵌入式开发流程一般是在PC机的Windows系统下安装Ubuntu虚拟机,搭建嵌入式开发环境及交叉编译环境,开发完成后,编译得到bin文件,然后在Windows下将bin文件通过串口或网络下发到嵌入式板卡,程序在嵌入式板卡上运行。...2021-11-05 06:06:35嵌入式开发流程是怎样的?
本篇文章整理下嵌入式开发中一些入门的基础技能,都是根据以往的工程经验整理,适用于之前没做过嵌入式开发的新手。嵌入式开发流程一般如下,一般是在PC机的Windows系统下安装Ubuntu虚拟机,搭建2021-11-08 06:24:02嵌入式开发的优缺点是什么?
)移植:为满足硬件要求修改内核源码嵌入式开发和单片机开发的区别:是否移植操作系统。没有操作系统的产品就不是嵌入式产品;传统开发(单片机/裸机开发)缺点:1.软件移植性差;(软件直接控制硬件...2021-11-08 07:42:13嵌入式开发的优缺点?
学习笔记一:嵌入式系统课程学习储备知识:C语言+单片机(硬件的工作原理)1、嵌入式技术是什么?嵌入式软件与非嵌入式软件的区别?嵌入式开发与单片机开发的区别?嵌入式开发的优缺点?嵌入式技术是以应用为2021-11-08 06:13:44嵌入式开发的基础知识和入门必要步骤
ARM嵌入式开发是嵌入式开发领略比较热门的技术,本文针对ARM嵌入式开发的入门者给出嵌入式开发的基础知识和入门必要步骤。1. 做个最小系统板:如果你从没有做过ARM嵌入式开发,建议你一开始不要2021-12-14 07:32:49嵌入式开发的核心竞争力有哪些?
`嵌入式开发的核心竞争力有哪些?嵌入式开发是一种软硬件结合的知识与技术。相比较其他开发方向,嵌入式开发的核心竞争力主要有以下几个方面:一,精通软硬件,技术“整合”度高。嵌入式开发需要懂各方面的技术2020-11-27 15:00:42嵌入式开发要学什么
[td] 最近遇到很多处于迷茫中的新手,在纠结要不要去学嵌入式,主要问题在于嵌入式的门槛非常高,经验少、或者非电子专业投身嵌入式行业能否发展下去。现在嵌入式开发行业的确发展很好,大多数从业者都是2021-01-18 06:36:18嵌入式开发要学什么?
一些他人的优秀代码,对比自己,可以找出编写方式的不同,哪种方式更优越等等,通过一些方法,自己会得到更大的收获。华清远见有职场来鸟带领,学习起来会很容易,学会的东西也更加实用) 以上就是嵌入式开发要学什么的内容,只要你自己能够钻研其中,一定可以发现嵌入式的奇妙。2017-09-06 16:21:42嵌入式开发要学什么内容 嵌入式开发学习路线介绍
` 嵌入式开发技术曾经一直处于不温不火的状态,自物联网飞速发展之后,运用嵌入式系统的领域越发广阔。嵌入式开发技术人才也同样随着趋势需求加大。更多的年轻人选择嵌入式开发技术作为自身职场的核心竞争手段2017-03-01 10:13:32嵌入式开发要学什么内容 嵌入式开发学习路线介绍
学院嵌入式开发讲师在这里介绍嵌入式开发学习路线,希望对于嵌入式开发学习内容不了解的读者可以有所帮助。嵌入式开发要学什么内容 嵌入式开发学习路线介绍: 1、C语言是所有编程语言中的强者,单片机、DSP2017-07-27 09:49:52嵌入式开发要学什么内容 嵌入式开发学习路线介绍
客学院嵌入式开发讲师在这里介绍嵌入式开发学习路线,希望对于嵌入式开发学习内容不了解的读者可以有所帮助。嵌入式开发要学什么内容 嵌入式开发学习路线介绍: 1、C语言是所有编程语言中的强者,单片机2017-06-30 10:07:24Java开发和嵌入式开发
首先,Java开发和嵌入式开发都是目前IT行业内比较常见的开发岗位,也都有大量的从业人员,所以从就业的角度来看,学习Java开发和嵌入式开发都是不错的选择。Java语言的应用领域包括Web开发2021-11-05 08:02:10Linux下嵌入式开发环境有哪些?
做Linux嵌入式系统的对常见的几种嵌入式开发环境一定不会默生,由于主要接触网络相关产品的一些系统设计,因此,将可能用到的嵌入式开发环境简要总结一下2019-10-29 08:05:47VScode嵌入式开发如何入门
VScode嵌入式开发之入门教程1.VScode进行单片机嵌入式开发教程2.单片机开发环境的搭建3.相关技巧与设置 VScode嵌入式开发之入门教程2021-11-08 08:13:17labview编写上位机软件
请问用labview编写上位机软件? 下位机是单片机上位机的功能应该是对采集到的数据进行处理和分析,并且实现实时监测,我之前没有接触过labview 有一点点c语言的基础应该怎么做呢最好有具体步骤 哪位大神指教一下 谢谢啦{:8:}2017-03-03 15:58:53【OK210申请】基于嵌入式linux的无线监控设备开发
过6410开发板作为控制器,利用无线网络技术,通过socket编程,将监控设备与上位机之间进行通信,这样监控设备的使用就会更加方便,利用QT编写上位机软件,对监控设备进行控制。2015-07-09 16:08:59一文详解Express Pi嵌入式开发板
Express Pi是什么?Express Pi嵌入式开发板有哪些功能配置?Express Pi嵌入式开发板有哪些特点呢?2021-12-27 06:33:31为什么使用MDK进行嵌入式开发其程序却无法正常运行呢
为什么使用MDK进行嵌入式开发其程序却无法正常运行呢?51单片机通过printf()与串口结合发送数据到串口调试工具的代码该如何去编写?2021-11-30 06:53:32什么是嵌入式技术?嵌入式开发方向是什么?
嵌入式系统开发概述1、什么是嵌入式技术?答:操作系统—>嵌入式操作系统:管理资源,解耦软硬件。2、嵌入式开发方向:入式上层应用开发、嵌入式底层系统软件开发、嵌入式系统工程师。3、嵌入式学习路线2021-11-05 09:00:56什么是嵌入式?单片机开发与嵌入式开发的区别在哪
一、初识嵌入式1.1 什么是嵌入式?1.1.1单片机开发:1.1.2嵌入式开发:1.2 单片机开发与嵌入式开发分区别1.2.1单片机开发1.2.2嵌入式开发1.3 嵌入式操作系统1.3.1什么是开源2022-02-24 06:29:14什么是嵌入式开发?
近几年,计算机嵌入式受到越来越多的人青睐,那么什么是嵌入式开发呢,嵌入式开发有很多个层次,大致有以下步骤: 硬件道路: 第一步: 嵌入式开发 pcb设计,一般为开发板的电路裁减和扩充,由开发2018-10-13 15:27:34什么是嵌入式开发呢
地,所以对自动化农业、机器人这些就很感兴趣,也就误打误撞的,报考了自动化专业,自然而言的,工作后,也是就沉浸在了这个行业之中。其实,包括自己,在刚开始做这些的时候,对嵌入式开发的概念都是很模糊的。那么,什么是嵌入式开发呢?首先,我们要知道,什么叫嵌入式,是单片机才叫做嵌入式吗?答案是当然不是。在一切智能化的设备2021-11-05 07:24:09什么样的人适合转行嵌入式开发?
Linux)移植到上面,同时编写必要的驱动程序,改写相应的内核代码。很显然后者是一个公司真正的技术核心。而技术核心的工资很可能是其他开发者的数倍。——知识体系嵌入式开发突出强制和项目,学习不仅仅是学习几项2018-09-20 16:52:50分享买来的各种嵌入式开发课件(3)
分享买来的各种嵌入式开发课件,希望对大家有用~传送门: 分享买来的各种嵌入式开发课件(1) https://bbs.elecfans.com/jishu_501479_1_1.html 分享买来2015-07-24 12:19:12基于嵌入式Linux/Qt 开发RFID智能仓储指纹管理系统
Qt 是一个用于桌面系统和嵌入式开发的跨平台应用程序框架。它包括一个直观的API和一个丰富的类库,以及用于GUI开发和国际化的集成工具,另外它支持Java?和C++开发。利用它,我们无须重新编写2017-07-29 10:07:30大学生应该如何学习嵌入式开发?
嵌入式开发给出点建议: 一:练好基本功嵌入式系统专业是综合了计算机硬件技术,计算机软件技术以及电子电路技术的一门综合学科,所涉及的内涵和知识非常广泛,包括:数字电路,模拟电路,计算机组成原理,单片机基础,C2016-09-29 14:19:20如何从零基础学习嵌入式开发
最靠谱的从零开始学习嵌入式开发之路如何从零基础学习嵌入式开发,我在这里给大家一个切实可行的道路,而且相对容易入手,学习中会不断有收获。掌握单片机,嵌入式开发是每个硬件工程师必修课程。但嵌入式开发2021-11-08 06:49:00如何用QT去编写GUI程序呢
QT编写嵌入式开发板上运行的GUI程序一、安装QT我的项目中的宿主机是Ubuntu,在Ubuntu的软件中心,即可方便的完成QT的安装,这里QT包含了QT Creator(编写代码)、QT设计器、QT翻译...2021-12-15 07:39:08新手学习嵌入式开发要学什么
,Shell Makefile脚本编写等知识,以及嵌入式开发环境的搭建。 中级嵌入式工程师 经过第一个阶段的学习,你已经可以进行嵌入式开发工作了,但是要进阶依旧还有很多知识要学,而这个阶段也将是第一个2018-10-19 09:54:25新手学习嵌入式开发要学什么?
,Shell Makefile脚本编写等知识,以及嵌入式开发环境的搭建。 中级嵌入式工程师 经过第一个阶段的学习,你已经可以进行嵌入式开发工作了,但是要进阶依旧还有很多知识要学,而这个阶段也将是第一个分水岭2018-10-14 17:17:40浅析单片机和嵌入式开发
对单片机和嵌入式开发的一点理解本文记录自己学习中的一些理解,只谈自己的理解,欢迎讨论和指正。基于单片机标准库源码的开发在自己做项目的过程中,使用stm32进行裸机开发的时候,调用标准库和hel库2021-11-05 09:24:31浅析基于linux的嵌入式开发
序言:学习基于linux平台的嵌入式开发之前我已经经过了基于纯单片机开发》》》基于实时系统ucosIII、freeRTOS平台的嵌入式开发两个阶段的学习和实战。基于linux平台的嵌入式开发是我学习2021-11-05 06:49:49究竟什么是嵌入式开发
嵌入式开发早在10年之前笔者就读本科时,就炒得火热的概念,当时说嵌入式开发将是得到大力发展的行业。一直到最近又有物联网IoT,智能硬件的发展,嵌入式开发再次被推向风口浪尖。下面我们就简单说一下究竟2021-11-08 06:13:20基于ARM的嵌入式开发
基于ARM的嵌入式开发:华清远见/孙天泽基于ARM的嵌入式开发内容有:ARM简介,基于ARM的嵌入式产品,ARM架构,基于ARM的嵌入式开发。2009-10-04 08:49:1981嵌入式开发
嵌入式开发就是指在嵌入式操作系统下进行开发,嵌入式Linux是以Linux为基础的嵌入式作业系统。这里提供了嵌入式开发相关内容,嵌入式开发板资料,嵌入式linux开发知识等内容。2011-12-20 13:21:35Qt自定义委托--实现批量升级UI
, ②Qt是跨平台的,所以代码开发一次,多平台运行。 ③Qt学习成本低,网上资料很多,基本你遇到的问题,网上都能找到。 对于嵌入式开发者来说,会写上位机可以提高开发效率,比如可以开发抓包工具,日志数据分析,升级(网络升级,串口升级等2022-10-31 12:27:001397基于QT的简单的上位机
一、前言大家好,我是ZhengN,本次来教大家编写一个基于QT的简单的上位机。学习一个新的东西我们都从最基础地实例开始,比如学习C语言我们会从编写一个hello程序开始、学习嵌入式我们从点灯开始2023-05-08 10:57:1116QT|编写一个简单的上位机
QT | 编写一个简单的上位机 时间 :2023-03-19文章目录QT | 编写一个简单的上位机 参考及资料: 1.打开`QT Creator` 2.新建工程 3.上位机界面设计 3-1.界面布局2023-05-08 10:12:052
评论
查看更多