概要
使用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);
}
}
}
最终呈现结果:

编辑:黄飞
-
嵌入式开发(49995)
-
上位机(56830)
相关推荐
热点推荐
QT在嵌入式环境的搭建
移植QT5.6到嵌入式开发板(史上最详细的QT移植教程)目前网上的大多数 QT 移植教程还都停留在 qt4.8 版本,或者还有更老的 Qtopia ,但是目前 Qt 已经发展到最新的 5.7 版本了2021-12-24 07:26:22嵌入式QT是什么?有何功能
嵌入式QT基础视频教程免费分享! 首先给大家介绍一下QT的简介,Qt 是一个用于桌面系统和嵌入式开发的跨平台应用程序框架。它包括一个直观的API和一个丰富的类库,以及用于GUI开发和国际化的集成工具,另外它支持Java™和C++开发。利用它,我们无须重新编写源代码,便可以构建运行在不同桌面操...2021-12-23 07:35:08嵌入式工程师为什么要学QT?
Qt对嵌入式工程师来说,真的很重要吗? Qt是一个跨平台的C++应用程序开发框架,非常适合嵌入式系统的开发,Qt在嵌入式开发中具有很重要的作用。 在项目实践中可以看出,Qt在工业自动化、医疗设备2025-08-14 15:15:11嵌入式是什么? 嵌入式开发是什么意思?
` 在科技发达的今天,人们对于生活质量也有了更高层次的追求,那就不得不引入嵌入式这项技术了,嵌入式开发被越来越多的人所熟知。那么,究竟什么是嵌入式呢?嵌入式开发是什么意思呢?接下来,小编慢慢跟你聊2018-07-26 15:58:14嵌入式开发
本帖最后由 gk320830 于 2015-3-7 06:45 编辑
请问大家一下,我是嵌入式开发的菜鸟一枚,请问学习嵌入式开发的过程应该是怎样的?由单片机学起吗?谢谢2013-12-04 22:37:53嵌入式开发与非嵌入式开发的区别
通过初步的学习,了解到嵌入式是在已有的硬件上移植操作系统,在操作系统之上做上层应用开发,在操作系统之下做底层开发。嵌入式开发与非嵌入式开发的区别在于软件的耦合度不同等,众所周知,在单片机的开发中2021-10-27 06:26:01嵌入式开发之Qt应用视频教程分享!
嵌入式开发之Qt应用也是我们在学习嵌入式中的一个重要部分,今天楼主在这里给大家分享了关于Qt方面的视频教程,大家可以参考一下,希望能帮助到大家!百度云分享:http://pan.baidu.com/s/1c1YGevI密码:2eim2017-01-03 14:10:02嵌入式开发培训都要学什么?
等相关知识,学习QT程序开发,进行嵌入式系统程序的调试。学会嵌入式开发的分析问题、解决问题的思维方法,掌握程序设计的基本方法和常用算法。1.嵌入式C语言:C语言是嵌入式领域中重要也是主要的编程语言,通...2021-11-08 06:09:56嵌入式开发教程之程序设计与开发维护
干货来了,本文创客学院嵌入式linux培训讲师和学员分享嵌入式程序设计和系统开发与维护的相关知识点。希望对学习嵌入式开发的学员有所帮助。 嵌入式开发教程之程序设计与开发维护: 一、嵌入式2017-05-26 14:59:52嵌入式开发有哪些技巧?
成为一个正式的嵌入式开发工程师是一个艰辛的过程。从规范完善的开发周期到严格执行和系统检查,开发高可靠性嵌入式系统的技术有许多种。本文介绍7个易操作且可以长久使用的技巧,它们对于确保系统更加可靠地运行并捕获异常行为大有帮助。2021-03-17 06:42:40嵌入式开发流程
嵌入式开发流程一般是在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嵌入式开发的关键点介绍
。
嵌入式开发的关键点:
1. 硬件限制:
嵌入式系统通常具有严格的硬件限制,例如处理器速度、内存和存储容量等。因此,嵌入式开发需要考虑这些限制,并编写高效的代码以确保系统的可靠性和性能。
2. 实时性2025-11-13 08:12:03嵌入式开发要学什么
[td] 最近遇到很多处于迷茫中的新手,在纠结要不要去学嵌入式,主要问题在于嵌入式的门槛非常高,经验少、或者非电子专业投身嵌入式行业能否发展下去。现在嵌入式开发行业的确发展很好,大多数从业者都是2021-01-18 06:36:18嵌入式开发要学什么内容 嵌入式开发学习路线介绍
` 嵌入式开发技术曾经一直处于不温不火的状态,自物联网飞速发展之后,运用嵌入式系统的领域越发广阔。嵌入式开发技术人才也同样随着趋势需求加大。更多的年轻人选择嵌入式开发技术作为自身职场的核心竞争手段2017-03-01 10:13:32嵌入式开发要学什么内容 嵌入式开发学习路线介绍
学院嵌入式开发讲师在这里介绍嵌入式开发学习路线,希望对于嵌入式开发学习内容不了解的读者可以有所帮助。嵌入式开发要学什么内容 嵌入式开发学习路线介绍: 1、C语言是所有编程语言中的强者,单片机、DSP2017-07-27 09:49:52嵌入式开发要学什么内容 嵌入式开发学习路线介绍
客学院嵌入式开发讲师在这里介绍嵌入式开发学习路线,希望对于嵌入式开发学习内容不了解的读者可以有所帮助。嵌入式开发要学什么内容 嵌入式开发学习路线介绍: 1、C语言是所有编程语言中的强者,单片机2017-06-30 10:07:24Linux下嵌入式开发环境有哪些?
做Linux嵌入式系统的对常见的几种嵌入式开发环境一定不会默生,由于主要接触网络相关产品的一些系统设计,因此,将可能用到的嵌入式开发环境简要总结一下2019-10-29 08:05:47VScode嵌入式开发如何入门
VScode嵌入式开发之入门教程1.VScode进行单片机嵌入式开发教程2.单片机开发环境的搭建3.相关技巧与设置 VScode嵌入式开发之入门教程2021-11-08 08:13:17什么是嵌入式?单片机开发与嵌入式开发的区别在哪
一、初识嵌入式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分享买来的各种嵌入式开发课件(3)
分享买来的各种嵌入式开发课件,希望对大家有用~传送门: 分享买来的各种嵌入式开发课件(1) https://bbs.elecfans.com/jishu_501479_1_1.html 分享买来2015-07-24 12:19:12基于ARM的嵌入式开发
基于ARM的嵌入式开发:华清远见/孙天泽基于ARM的嵌入式开发内容有:ARM简介,基于ARM的嵌入式产品,ARM架构,基于ARM的嵌入式开发。2009-10-04 08:49:19
83虚拟机的嵌入式开发
虚拟机的嵌入式开发
华清远见视频教程使用说明=================================
环境要求:1、推荐最佳分辨率为1024*2010-02-11 10:44:44
20Ubuntu嵌入式开发环境的建立
嵌入式开发一般使用交叉开发环境,即上位机开发软件然后下载到在下位机运行。1.1. 上位机软件开发环境的构建我主要使用Ubuntu 8.04进行开发,该版本是长期支持版,稳定2010-07-10 14:49:28
38嵌入式开发
嵌入式开发就是指在嵌入式操作系统下进行开发,嵌入式Linux是以Linux为基础的嵌入式作业系统。这里提供了嵌入式开发相关内容,嵌入式开发板资料,嵌入式linux开发知识等内容。2011-12-20 13:21:35
嵌入式开发平台的搭建与软件移植
嵌入式应用是近年来流行最快的徽电子产业,嵌入式开发包含着内容丰富的技术底盆。针甘日前嵌入式开发广泛的市场需求,时比存在的各种嵌入式开发方式,提出了一种基于网络和串2011-12-27 15:51:56
67嵌入式开发就业前景分析_嵌入式领域的职业发展方向
嵌入式开发技术在物联网领域应用最为广泛,适合于各个领域,主要应用于消费类电子行业。嵌入式开发的入门门槛还是比较高的。那么嵌入式开发就业前景怎么样呢?嵌入式领域的职业发展方向是什么?本文将进行详细分析2018-01-29 14:09:19
19874嵌入式开发语言有哪些_最全面嵌入式开发语言概述
嵌入式开发语言有哪些?嵌入式开发的入门门槛还是比较高的,不仅要懂较底层软件,对软件专业水平要求较高,而且必须懂得硬件的工作原理,嵌入式系统应用越来越广泛,目前,在嵌入式系统开发过程中使用的语言种类有很多,但仅有少数的几种语言得到了比较广泛的应用,主要有Ada、C/C++等。2018-01-29 14:47:36
10380
学嵌入式开发入门_学嵌入式开发需要看哪些书籍
现在嵌入式开发越来越吃香,很多人都想要学习却不知道要从何下手。本文分析了学习嵌入式软件开发需要具备哪些基本知识和技能,开发学习的基本步骤,并给出了各种参考资料及网站,同时小编还推荐了学习嵌入式开发的书籍。2018-04-04 10:25:40
39387嵌入式开发和单片机开发有什么区别和联系
什么是嵌入式?什么是单片机?嵌入式和单片机有什么区别和联系呢?本文首先介绍了嵌入式开发和单片机开发的联系,其次阐述了嵌入式开发和单片机开发的区别,最后对介绍了嵌入式及单片机的特点是什么。具体的跟随小编一起来了解一下。2018-05-18 10:40:15
37268嵌入式开发好学吗_嵌入式开发职业发展方向是什么
本文首先来了解一下嵌入式前景及薪资待遇,其次解答了嵌入式开发好学不好学的问题,最后阐述了嵌入式开发必会知识以及嵌入式开发职业的四大发展方向,具体的跟随小编一起来了解一下。2018-05-18 16:41:44
10098嵌入式开发与单片机开发有什么区别
1嵌入式开发就是设计特定功能的计算机系统,手机,mp3、mp4.mp5自动供水系统,洗衣机,油井监控系统等等都是嵌入式系统,形象的说就是开发一种嵌入在一个机器上实现特定功能的一个系统。单片机开发2018-07-09 12:00:41
581嵌入式开发与单片机开发有什么区别
1嵌入式开发就是设计特定功能的计算机系统,手机,mp3、mp4.mp5自动供水系统,洗衣机,油井监控系统等等都是嵌入式系统,形象的说就是开发一种嵌入在一个机器上实现特定功能的一个系统。单片机开发2018-07-17 11:33:57
1472嵌入式开发与单片机开发有什么区别
1嵌入式开发就是设计特定功能的计算机系统,手机,mp3、mp4.mp5自动供水系统,洗衣机,油井监控系统等等都是嵌入式系统,形象的说就是开发一种嵌入在一个机器上实现特定功能的一个系统。单片机2018-07-19 11:35:03
558什么是嵌入式开发?
近几年,计算机嵌入式受到越来越多的人青睐,那么什么是嵌入式开发呢,下面尚观教育小编就来给同学们介绍一下,嵌入式开发有很多个层次,大致有以下步骤: 硬件道路: 第一步: 嵌入式开发 pcb设计2018-09-27 15:15:23
2069嵌入式开发要学什么嵌入式开发的一些入门教材推荐
本文档的主要内容详细介绍的是嵌入式开发要学什么嵌入式开发的一些入门教材推荐资料免费下载教材包括了:ARM嵌入式项目开发三位一体实战精讲,C GUI Qt 4编程(第二版),从零开始学51单片机,你必须知道的495个C语言问题等33本电子教材推荐2019-01-10 14:46:53
33如何快速熟练掌握嵌入式开发嵌入式开发工程师需要做哪些事情
怎样才能快速熟练掌握嵌入式开发呢?成熟的嵌入式开发工程师需要做哪些事情?是很多新手朋友想要了解的,那么今天我们来简单的介绍一下2019-05-09 18:17:00
8Java开发和嵌入式开发该如何选择
首先,Java开发和嵌入式开发都是目前IT行业内比较常见的开发岗位,也都有大量的从业人员,所以从就业的角度来看,学习Java开发和嵌入式开发都是不错的选择。2019-06-10 11:37:47
2372如何看待Java开发和嵌入式开发
首先,Java开发和嵌入式开发都是目前IT行业内比较常见的开发岗位,也都有大量的从业人员,所以从就业的角度来看,学习Java开发和嵌入式开发都是不错的选择。2019-06-15 10:33:46
3175嵌入式开发的流程_嵌入式开发的前景
当前,嵌入式开发已经逐步规范化,在遵循一般工程开发流程的基础上,嵌入式开发有其自身的一些特点。主要包括系统需求分析(要求有严格规范的技术要求)、体系结构设计、软硬件及机械系统设计、系统集成、系统测试,最终得到产品。2020-07-30 11:23:57
2578基于嵌入式ARM的信号采样及QT图形显示
基于嵌入式ARM的信号采样及QT图形显示(嵌入式开发技术图解)-该文档为基于嵌入式ARM的信号采样及QT图形显示总结文档,是一份很不错的参考资料,具有较高参考价值,感兴趣的可以下载看看………………2021-08-04 10:28:51
9嵌入式LINUX的Qt开发入门教程
嵌入式LINUX的Qt开发入门教程(最好的嵌入式开发板)-该文档为嵌入式LINUX的Qt开发入门总结文档,是一份很不错的参考资料,具有较高参考价值,感兴趣的可以下载看看………………2021-08-04 11:01:09
30簇绒机控制系统中上位机嵌入式系统关键技术的研究
簇绒机控制系统中上位机嵌入式系统关键技术的研究(汽车嵌入式开发)-论文首先综述了簇绒机控制系统国内外研究现状、分析了嵌入式技术的优势,提出了基于嵌入式技术的簇绒机控制系统上位机方案,分析了簇绒机2021-08-04 14:27:57
6基于嵌入式Linux系统的Qt-Embedded图像处理界面开发总结
基于嵌入式Linux系统的Qt-Embedded图像处理界面开发总结(嵌入式开发培训网)-文档为基于嵌入式Linux系统的Qt-Embedded图像处理界面开发总结文档,是一份不错的参考资料,感兴趣的可以下载看看,,,,,,,,,,,,,2021-08-04 15:23:20
7嵌入式开发(一):嵌入式开发新手入门
本篇文章整理下嵌入式开发中一些入门的基础技能,都是根据以往的工程经验整理,适用于之前没做过嵌入式开发的新手。嵌入式开发流程一般如下,一般是在PC机的Windows系统下安装Ubuntu虚拟机,搭建2021-10-14 10:58:31
79嵌入式开发概括
学习笔记一:嵌入式系统课程学习储备知识:C语言+单片机(硬件的工作原理)1、嵌入式技术是什么?嵌入式软件与非嵌入式软件的区别?嵌入式开发与单片机开发的区别?嵌入式开发的优缺点?嵌入式技术是以应用为2021-10-14 11:32:15
2嵌入式开发前景怎么样?嵌入式开发有哪些优势?
嵌入式开发行业近年来受关注度是越来越高,不过在关注度高的前提下还是有些人没有那么了解嵌入式。其实嵌入式技术早已经进入我们的生活当中,比如说最常见的智能手机、智能电视、智能家电等等,那么对于嵌入式开发2021-10-20 14:50:59
2嵌入式开发的初步认识
通过初步的学习,了解到嵌入式是在已有的硬件上移植操作系统,在操作系统之上做上层应用开发,在操作系统之下做底层开发。嵌入式开发与非嵌入式开发的区别在于软件的耦合度不同等,众所周知,在单片机的开发中2021-10-20 18:36:05
9嵌入式开发
,非嵌入软件做的裸机(没有操作系统)开发3.嵌入式开发与单片机开发的区别?传统开发又叫单片机开发,传统开发的缺点有两个:第一,软件的可移植性差。第二,软件开发人员必须懂硬件的工作原理。...2021-10-20 21:36:06
3嵌入式开发资料免费分享
嵌入式开发资料免费分享嵌入式工程师经验分享:如何学习嵌入式开发截取文档部分学习嵌入式工程师经验分享的资料分享给大家,文档上从、嵌入式系统的概念,嵌入式系统的分层与专业的分类,目标与定位,开发系统2021-10-21 11:07:55
47嵌入式开发
嵌入式开发就是指在嵌入式操作系统下进行开发,包括在系统化设计指导下的硬件和软件以及综合研发。除暂且分离硬件的EDA研发以外,侧重的就是在一定硬件条件下的系统化设计和软件研发。定义嵌入式开发是指利用2021-10-21 11:51:05
4嵌入式LINUX的Qt开发入门教程
的跨平台图形用户界面应用程序开发框架。如何跨平台?上到服务器上位机,下到嵌入式GUI,上天入地无所不能。Qt最早是由1991年由Qt Company开发,但是到2008年,Qt Company科技被诺...2021-11-01 16:31:14
17嵌入式开发Linux入门
嵌入式开发导语嵌入式基础概念交叉开发和自助开发嵌入式开发相关术语1.开发计算机(又名:主计算机)2.目标计算机(又名:目标板、目标)3.交叉编译器/汇编程序/链接器4.交叉库(又名:目标库)5.交叉2021-11-02 14:36:06
31嵌入式开发培训怎么样?嵌入式开发培训多少钱
如今嵌入式人才稀缺,身价自然就高。据了解,初入门的嵌入式开发人员年薪一般都能达到7-10万元,有3年以上经验的人员年薪都在15万元以上,有5年工作经验的高级嵌入式工程师年薪在30W+。不仅薪水不菲2021-11-02 18:06:02
12嵌入式开发概括
学习笔记一:嵌入式系统课程学习储备知识:C语言+单片机(硬件的工作原理)1、嵌入式技术是什么?嵌入式软件与非嵌入式软件的区别?嵌入式开发与单片机开发的区别?嵌入式开发的优缺点?嵌入式技术是以应用为2021-11-02 20:06:00
13嵌入式开发(一):嵌入式开发新手入门(转载后续需要修改补充)
本篇文章整理下嵌入式开发中一些入门的基础技能,都是根据以往的工程经验整理,适用于之前没做过嵌入式开发的新手。嵌入式开发流程一般如下,一般是在PC机的Windows系统下安装Ubuntu虚拟机,搭建2021-11-02 20:06:00
17python做嵌入式开发_Python和嵌入式的区别是什么?可以做嵌入式开发吗?
从概念上来说,嵌入式和Python的区别还是比较明显的,嵌入式是一个开发领域,而Python则是一门编程语言。下面就来和大家说一说嵌入式和Python这两个之间的区别。嵌入式开发是开发领域的一个重要2021-11-02 20:21:02
14想学嵌入式开发,没有基础能学会吗?
嵌入式开发在近年来的IT行业中非常火热,迎来了很多初学者的学习。生活中的智能硬件流行广泛,嵌入式开发的前景无疑是非常好的,目前市面上嵌入式开发工程师需求量大,薪资待遇也是水涨船高。那么问题来了,对于初学者来说,想学嵌入式开发,没有基础能学会吗? 上海尚观科技致力于嵌入式开发培训11年,用事实...2021-11-02 20:21:02
10嵌入式开发培训学什么?嵌入式开发板知识讲解
嵌入式开发就是指在嵌入式操作系统下进行开发,一般常用的系统有WinCE,ucos,vxworks,linux,android等。另外,用c,c++或汇编开发;用高级处理器,arm7,arm92021-11-02 20:21:03
16嵌入式开发概述(20190325小结)
)移植:为满足硬件要求修改内核源码嵌入式开发和单片机开发的区别:是否移植操作系统。没有操作系统的产品就不是嵌入式产品;传统开发(单片机/裸机开发)缺点:1.软件移植性差;(软件直接控制硬件...2021-11-02 21:05:59
15Qt 嵌入式图形开发大全和QT开发手册
Qt 嵌入式图形开发大全和QT开发手册,感觉这个资料会很多人要,毕竟学习嵌入式的人还蛮多的,各种找嵌入式的资料,今天给大家真理了这个嵌入式图形开发大全,也是在闯客网技术论坛下载的,哈哈哈哈,废话不多2021-11-03 09:51:01
21VScode嵌入式开发之入门教程
VScode嵌入式开发之入门教程1.VScode进行单片机嵌入式开发教程2.单片机开发环境的搭建3.相关技巧与设置 VScode嵌入式开发之入门教程2021-11-03 09:51:01
44嵌入式学习培训能学会吗?嵌入式开发培训都要学什么?
等相关知识,学习QT程序开发,进行嵌入式系统程序的调试。学会嵌入式开发的分析问题、解决问题的思维方法,掌握程序设计的基本方法和常用算法。1.嵌入式C语言:C语言是嵌入式领域中重要也是主要的编程语言,通...2021-11-03 10:06:05
15蓝桥杯嵌入式开发学习索引
联系方式作者:马一飞QQ:791729359 蓝桥杯嵌入式开发学习目录蓝桥杯嵌入式开发经验分享(1.嵌入式学习准备)蓝桥杯嵌入式开发经验分享(2.液晶驱动参考例程的...2021-11-03 10:36:02
20嵌入式开发 ---必看图书
1.《linux驱动设备驱动开发详解》 基于linux4.0 是目前主流的 嵌入式开发用的系统 整个开发流程很详细,是嵌入式开发的入门之选,在2021年之前是没有任何图书有这么详细的教程的,是国内2021-11-03 13:06:05
12学习嵌入式开发前景问题解答
对于想转行的白领或者是刚步入社会的大学生来说,选择学习嵌入式开发仅仅是一个开端,不管是大家有创业的想法,还是想成为一名优秀的嵌入式开发工程师,都要学好嵌入式开发。上海尚观科技致力于嵌入式开发教育11年,有着资深的教学经验,今天给大家说说学习嵌入式开发前景的问题解答。 首先给大家介绍一下嵌入式...2021-11-03 14:21:01
8Qt自定义委托--实现批量升级UI
, ②Qt是跨平台的,所以代码开发一次,多平台运行。 ③Qt学习成本低,网上资料很多,基本你遇到的问题,网上都能找到。 对于嵌入式开发者来说,会写上位机可以提高开发效率,比如可以开发抓包工具,日志数据分析,升级(网络升级,串口升级等2022-10-31 12:27:00
3798单片机开发和嵌入式开发的区别
单片机开发和嵌入式开发都是针对嵌入式系统的应用领域,但是两者有着不同的特点和应用场景。在本文中,我们将探讨单片机开发和嵌入式开发的区别,并介绍它们的应用场景和技术特点。2023-04-14 16:36:43
3758基于QT的简单的上位机
一、前言大家好,我是ZhengN,本次来教大家编写一个基于QT的简单的上位机。学习一个新的东西我们都从最基础地实例开始,比如学习C语言我们会从编写一个hello程序开始、学习嵌入式我们从点灯开始2023-05-08 10:57:11
19手把手教你编写一个上位机
本次来教大家编写一个基于QT的简单的上位机。
学习一个新的东西我们都从最基础地实例开始,比如学习C语言我们会从编写一个hello程序开始、学习嵌入式我们从点灯开始。
同样的,我们也从编写一个简单的基于QT的上位机来体会体会上位机开发及认识认识QT。2023-05-08 10:36:44
1QT|编写一个简单的上位机
QT | 编写一个简单的上位机 时间 :2023-03-19文章目录QT | 编写一个简单的上位机 参考及资料: 1.打开`QT Creator` 2.新建工程 3.上位机界面设计 3-1.界面布局2023-05-08 10:12:05
3嵌入式开发中为什么选择C语言?它有哪些特点?
众所周知,C语言在嵌入式开发中占据着十分重要的地位,为什么嵌入式开发要选择C语言?嵌入式开发的方向可以分为单片机开发、Linx应用开发和现场可编辑逻辑门阵列(FPGA)开发,不同于传统开发模式2023-01-04 09:56:12
2000
Linux系统的嵌入式开发是什么
嵌入式开发听起来很高大上,但其实它就在我们身边。
嵌入式开发是指将操作系统、应用程序或数据存储在嵌入式设备中,如手机、平板电脑、智能家居等。
随着物联网时代的到来,嵌入式开发越来越成为一种重要的技术手段。2023-10-12 15:40:39
2974嵌入式开发前景怎么样?
嵌入式开发前景非常广阔,这主要得益于物联网、人工智能、大数据等技术的快速发展,以及嵌入式系统在各个领域的广泛应用。以下是对嵌入式开发前景的详细分析2024-07-10 09:00:29
5513
电子发烧友App



评论