Qt5.7 Qt for Embedded Linux

2023-11-11

从Qt5.0开始,Qt不再包含自己的视窗系统了(QWS)。对于单屏幕的情况,使用QtPlatform Abstraction是一个很好的选择。多屏的情况可以通过Wayland实现。

         有许多跨平台的插件可以使用:EGLFS,LinuxFB,KMS,DirectFB,Wayland。可以通过配置Qt使用这些插件。默认的平台插件是特殊设备。例如,许多板子默认使用eglfs。如果默认的不合适,可以通过修改QT_QPA_PLATFORM环境变量来设置另一个插件。可选的,使用-platform 命令行也可以达到相同的效果。

配置一个特殊的设备

针对一个给定的设备平台编译Qt需要提供一个工具链和一个文件系统。另外,为了支持EGL和OpenGL ES2.0,一些设备需要特殊厂商修改的代码。这和非加速平台无关,例如,有些人使用LinuxFB,仅仅用于一些软件渲染。这就意味着Qt Quick 2的功能不可用,因为Qt Quick 2 使用OpenGL渲染。

qtbase/mkspecs/devices目录包含配置和图形配置代码。例如,linux-rasp-pi2-g++ mkspec目录包含编译设置使用可选的编译器和链接器标志用于Raspberry Pi 2设备。Mkspec还包含关于eglfs钩子的一些信息或者一个适合eglfs设备集成插件的一个参考。通过指定配置工具选项-device参数指定设备。后面的名称必须和devices目录下的一个子目录匹配。

下面是一个Raspberry Pi 2的配置示范。对于大多数嵌入式Linux板,配置命令是相似的:

./configure-release -opengl es2 -device linux-rasp-pi2-g++ -device-optionCROSS_COMPILE=$TOOLCHAIN/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf--sysroot $ROOTFS -prefix /usr/local/qt5

 

最重要的参数是-device和-sysroot,通过指定-sysroot,头文件和库文件用于配置的特征检测测试,也包含Qt本身,指定的路径是特定的目录,而不是主机PC标准路径。这就意味着安装开发包到哪一个主机环境没有关系。例如,为了获得libinput支持没有必要在主机上安装libinput开发头文件和库文件。取而代之,对应目标结构的头文件和库文件需要安装在sysroot中。

交叉编译的时候Pkg-config也是被支持的。Configure自动设置PKG_CONFIG_LIBDIR来使pkg-config报告基于sysroot的编译器和链接器设置而不是主机的设置。这通常不需要其它更多 的适配就可以工作得很好。然后,在运行configure之前,主机上的PKG_CONFIG_PATH环境变量必须unset。否则Qt组建可能会尝试使用主机上的不合适的头文件和库文件。

指定-sysroot自动的导致设置—sysroot参数。在一些情况下,这并不是希望的,这可以通过传递-no-gcc-sysroot 给configure来使之失效。

-prefix,-extprefix和-hostprefix控制qt组建时的目标目录。在上面的例子中,编译Arm上的Qt的目标板上的目录为/usr/local/qt5。注意,运行make install不部署任何东西到设备上。如果不设置extprefix,默认的安装目录为sysroot+prefix,然而有些时候我们不希望放到sysroot目录下,可以通过指定-extprefix目录来指定目标目录。最后,-hostprefix允许指定生成的主机工具比如:qmake,rcc uic,如果不指定-hostprefix 将会安装在extprefix目录下。

嵌入式linux设备的平台插件

EGLFS

EGL是OpenGL和本地视窗系统中间的一个接口。Qt可以使用EGL作为context和surface管理,然而,API包含非指定平台部分:本地视窗的创建必须通过特定平台的方式创建。因此,就需要对板子或者指定GPU修改代码。有两种修改的方式:一种是通过eglfs hooks,这种方式可以是一个单源文件编译进平台插件中,第二种方式就是动态加载EGL设备集成插件。

EGLFS是一个为了Qt5应用运行的平台插件,Qt5运行在EGL和OpenGL ES2.0之上而且没有真实的视窗系统(比如 X11 Wayland)。对于Qt Quick 2和本地OpenGL应用,它也支持软件渲染视窗(例如QWidget)。在OpenGL应用中,widget的内容是使用CPU转化为图像渲染的,然后通过这个插件上传到纹理和混合。

这就是为什么当代嵌入式Linuxy设备建议包含一个GPU的原因。EGLFS强制第一个顶级窗口(QWidget或者QQucikView)为全屏。这个窗口也被选择成为根widget窗口,其它的顶级窗口(例如对话框,弹出菜单或者下拉菜单)都放入第一个窗口中。这很有必要,因为使用EGLFS总有一个真实存在的本地窗口和EGL窗口外观,并且其它的都属于第一个创建的widget或者window. 这种方式可以工作得很好,有一个主窗口存在在整个应用的生命周期里,其它的后来创建的所有的窗口都属于第一个窗口。

有更多的基于OpenGL视窗的限制。Qt 5.3,eglfs支持一个单全屏GL窗口(比如,一个基于OpenGL的QWindow,QQuickView或者QGLWidget)。打开另外的OpenGL窗口或者混合有基于QWidget内容的窗口就不被支持了。它会关闭这个应用然后报一个错误消息。

如果有必要,eglfs可以通过使用以下环境变量进行配置:

l  QT_QPA_EGLFS_FB-覆盖Framebuffer设备。默认的配置是/dev/fb0。在很多嵌入式平台上这不是非常适宜的了,因为framebuffer仅用于查询设置比如显示尺寸。然而在有一些设备上,多屏显示设置中这些参数提供设定显示参数的能力,参数和LinuxFB中fb的参数相似。

l  QT_QPA_EGLFS_WIDTH和QT_QPA_EGLFS_HEIGHT-屏幕像素宽度和屏幕像素高度。当然eglfs尝试从framebuffer设备/dev/fb0中读取这些参数,但是有时会不工作,所以手动设置尺寸变得很有必要。

l  QT_QPA_EGLFS_PHYSICAL_WIDTH和QT_QPA_EGLFS_PHYSICAL_HEIGHT-屏幕宽度和高度物理尺寸,单位是毫米。有些平台没有/dev/fb0或者查询失败的情况,这些值使用默认的DPI=100计算宽和高,这个变量可以用于覆盖任何默认值。

l  QT_QPA_EGLFS_DEPTH-重置屏幕的颜色深度。在没有/dev/fb0设备结点的平台上或者查询失败的平台上,颜色的默认深度为32.这个变量可以用于修改默认值。注意这仅仅会影响QScreen报告的颜色深度值。它和EGL配置或者OpenGL的颜色深度无关。

l  QT_QPA_EGLFS_SWAPINTERVAL-默认的交换值为1。这将会同步垂直刷新。例如,设置间隔为0,将会尽最快的方式运行不带任何同步。

l  QT_QPA_EGLFS_FORCEVSYNC-设置该变量,eglfs请求RBIO_WAITFORVSYNC。

l  QT_QPA_EGLFS_FORCE888-设置该变量时,红绿蓝通道大小被忽略。强制设置每一个通道为8位。

l  QT_QPA_EGLFS_DEBUG-如果设置该变量,调试信息将会打印到调试输出口。

l  QT_QPA_EGLFS_INTERGRATION-除了编译进的hooks,能够提供设备或者厂商修改的可动态加载的插件。该环境变量指定一个特定的插件。

除了QT_QPA_EGLFS_DEBUG,eglfs还提供更多的日志系统。有以下几种日志方式:

l  qt.qpa.egldeviceintegration – Enables logging for dynamically loaded backends. Veryuseful to check what backend is in use.

l  qt.qpa.input – Enables debug output both from the evdev and libinput input handlers.Very useful to check if a given input device was recognized and opened.

l  qt.qpa.eglfs.kms – Enables verbose logging in the KMS/DRM backend.

 

LinuxFB

这个插件直接写framebuffer.仅支持软件渲染内容。注意在一些设置上,显示性能将被限制。

         Linuxfb插件允许指定额外的设置,传递参数QT_QPA_PLATFORM环境变量或者通过-platform命令行选项。例如,QT_QPA_PLATFORM=linuxfb:fb=/dev/fb1指定framebuffer设备/dev/fb1而不是fb0.可以指定多设置通过冒号分割。

l  fb=/dev/fbN –指定framebuffer设备。在多显示器设置上,这通常允许运行应用在不同的显示器上。

l  size=<width>x<height> -

l  mmsize=<width>x<height>

l  offset=<width>x<height>

l  nographicsmodeswitch –禁止切换虚拟终端到图形模式(KD_GRAPHICS),另外,切换到图形模式,闪烁的光标和空白屏也同样无效。当设置这个参数时,这些会被跳过。

l  tty=/dev/ttyN –重置虚拟控制台。仅当nographicsmodeswitch未设置时使用

Input

相对于没有视窗系统,鼠标、键盘、触摸板输入直接从evdev读取或者使用第三方的库实现比如libinput、tslib.这需要/dev/input/event*可以被用户读取。Eglfs和Linuxfb内部有所有的输入处理。

使用libinput

         Libinput是一个用于处理输入设备的库。相对于Qt直接读取evdev,它提供了另一种实现方式。为了使用libinput,配置编译Qt时需要准备libudev和libinput开发文件。如果使用键盘支持,xkbcommon也是必需的。Eglfs和linuxfb不需要其它额外的配置由于它们默认使用libinput.如果没有libinput支持或者QT_QPA_EGLFS_NO_LIBINPUT设置了。Qt将会使用它自己的evdevhandlers处理。

Eglfs和linuxfb不使用libinput

有一些环境变量可以进行设置,QT_QPA_EVDEV_MOUSE_PARAMETERS, QT_QPA_EVDEV_KEYBOARD_PARAMETERS以及QT_QPA_EVDEV_TOUCHSCREEN_PARAMETERS.

QT_QPA_EGLFS_DISABLE_INPUT 禁用输入

QT_QPA_FB_DISABLE_INPUT禁用输入

QT_QPA_EVDEV_TOUCHSCREEN_PARAMETERS

鼠标输入

鼠标光标会一直显示,除非设置QT_QPA_EGLFS_HIDECURSOR (for eglfs) 或者QT_QPA_FB_HIDECURSOR (for linuxfb),Qt的基于libudev的设备会查看报告,报告中至少有一个鼠标可用。如果不使用libudev,鼠标箭头会一直显示除非通过修改环境变量禁止显示。

只有使用libudev时才支持热插拔.它允许在应用运行的时候插拔鼠标。

键盘输入

Evdev键盘处理支持以下额外参数:

·                    /dev/input/... – 指定输入设备名称.如果未指定,Qt通过libudev查找一个合适的设备,或者遍历所有的设备结点查找一个合适的设备。

·                    grab – 允许抢占输入设备

·                    keymap – 指定键盘映射文件

·                    enable-compose - Enables compositing.

l  repeat-delay – 设置一个用户定义的按键重复延时

l  repeat-rate -设置一个用户定义的按键重复率.

在嵌入式linux系统的终端处理中,按键行为是被谁处理是未知的,因为输入事件既可以被Qt应用处理也可以被终端处理。为了解决这个问题,可以设置以下选项

l  在应用启动的时候设置tty键盘的模式K_OFF来禁用终端键盘处理,这将阻止键盘事件进入终端。有些情况下,标准键盘行为需要被重新载入,这里把QT_QPA_ENABLE_TERMINAL_KEYBOARD设置为1.注意:这仅仅从远程终端(ssh)启动一个应用时有用,终端键盘输入保持可用。

l  一个可选择的实现方式是使用udev键盘处理的grab参数,QT_QPA_EVDEV_KEYBOARD_PARAMETERS的参数grab=1.这将导致抢占一次输入设备,如果抢占成功,系统中的其它组件就不会收到键盘事件。这种方式更适合于从远程启动的应用,因为不需要获取tty设备。

 

l  Finally, for many specialized Embedded Linux images it does not makesense to have the standard terminal sessions enabled in the first place. Referto your build environment's documentation on how to disable them. For example,when generating images using the Yocto Project, unsetting SYSVINIT_ENABLED_GETTYS results in having no getty process running, andthus no input, on any of the virtual terminals.

 

如果内建的键盘映射不能满足要求,可以使用eglfs的loadKeymap()函数或者使用keymap参数来加载一个键盘映射文件。LoadKeyMap()允许在程序运行时改变键盘映射。注意,这需要使用eglfs内部的键盘处理,如果键盘处理是通过-plugin命令行参数的方式加载的不可以使用loadkeymap().

    注意:特殊系统的键盘组合现在不被支持会被忽略比如(Ctrl+Alt+Fx) (Ctrl+Alt+Backspace

    生成一个自定义键盘映射,可以使用kmap2qmap工具。这个工具在qttools模块里。源文件必须是标准Linux kmap格式,这种格式可以被内核的loadkeys命令理解。也就是说可以使用以下源来生成qmap文件:

 

·        The LinuxConsole Tools (LCT) project.

  • Xorg X11 keymaps 通过使用ckbcomp工具转化 kmap 格式
  • kamp文件是纯文本文件,可以手动编写。

Kmap2qmap是一个命令行程序,至少需要两个文件参数最后一个是生成的.qmap文件,其它所有的参数都将作为输入的.kmap文件。例如:

kmap2qmapi386/qwertz/de-latin1-nodeadkeys.kmap include/compose.latin1.incde-latin1-nodeadkeys.qmap

注意:kmap2qmap并不能支持Linux内核支持的所有的符号,当转化标准keymap文件时,会显示许多的警告信息Show_Registers, Hex_A等等;忽略这些信息即可。

触摸

对于一些电阻单点触摸屏,需要退回使用tslib。可以通过设置环境变量QT_QPA_EGLFS_TSLIB or QT_QPA_FB_TSLIB为1来启动tslib支持。设置TSLIB_TSDEVICE或者通过命令行传设备名称参数来改变设备。注意:tslib输入处理产生鼠标事件并仅支持单点触摸,与之相对的,evdevtouch产生真正的多点触摸QTouchEvent事件。

笔控板

Evdevtablet插件为Wacom和相似的pen-basedtables提供基础支持,它产生QTabletEvent事件。QT_QPA_GENERIC_PLUGINS=evdevtablet或者命令行传递参数-plugin evdevtablet来使能evdevtablet。该插件可以有一个设备结点参数,例如

QT_QPA_GENERIC_PLUGINS=evdevtablet:/dev/event1,这时Qt自动查找设备就不进行自动查找了。

调试输入设备

通过使能qt.qpa.input日志规则,可以打印一些调试信息输出。例如:设置QT_LOGGING_RULES环境变量qt.qpa.input=true。这对于检测哪一个设备被使用或者查找设备过程中的问题解决很有帮助。

使用用户写入鼠标光标图片

Eglfs使用它自己的32x32的鼠标图片。如果这不能满足,用户可以指定自己的图片,方法是设置QT_QPA_EGLFS_CURSOR环境变量,这个环境变量是一个JSON文件名称。这个文件也可以通过Qt资源文件嵌入到应用中。

例如:一个嵌入的鼠标光标使用8张鼠标图片,每一行可以进行如下指定:

{

   "image": ":/cursor-atlas.png",

   "cursorsPerRow": 8,

   "hotSpots": [

        [7, 2],

        [12, 3],

        [12, 12],

        ...

   ]

 }

注意:theimages are expected to be tightly packed in the atlas: the width and height ofthe cursors are decided based on the total image size and the cursorsPerRow setting. Atlases have to provide an image for all the supportedcursors.


以上是个人心血来潮翻译一下Qt的官方说明,这是本人第一次翻译英文,有很多地方不知道怎么翻译,大家凑合看吧。

技术交流群:589805575,欢迎志同道合者加入

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Qt5.7 Qt for Embedded Linux 的相关文章

  • 如何将 QFile 与 std::iostream 一起使用?

    是否可以像 std iostream 一样使用 QFile 我很确定那里一定有一个包装纸 问题是在哪里 我有另一个库 它需要 std istream 作为输入参数 但在我的程序中 此时我只有一个 QFile 我使用以下代码提出了自己的解决方
  • 使 QLabel 的像素图透明

    我有一个带有 QLabel 和像素图的主窗口 我想让它透明 或不那么不透明 我正在使用下面的代码 ui gt label gt setAttribute Qt WA TranslucentBackground ui gt label gt
  • 是否可以根据 QSlider 的位置来改变其手柄的颜色?

    我非常清楚如何通过样式表自定义 QSlider 但我想知道是否可以执行以下操作 我希望滑块的手柄从蓝色变为黄色 当设置在左侧时 它是蓝色的 设置在左侧时 它是蓝色的 当你将它向右移动时 它会出现从蓝色到黄色的渐变 如果可以通过样式表 如何实
  • Qt:将数字转换为 QString、QVariant 或 QString::number 哪个更好

    我只是好奇 比方说 我需要在控制台中输出一个数字 代码是 include
  • 使用 QWT 构建时出错

    我收到一个错误 undefined reference to QwtPlot QwtPlot QWidget 当我尝试构建我的项目时 即使设置中一切看起来都很好 在我的 CmakeLists txt 中我有 include director
  • 相对文件路径的区别:Qt Creator的调试模式和发布模式

    QFile file test txt if file open QIODevice ReadOnly qDebug lt lt You got me 我在用 Qt 4 8 6 与 MSVC 2010 Qt 创建者 3 1 1 Window
  • Qt 5.3 QPlainTextEdit 更改 QTextCursor 颜色

    我想更改下面的光标颜色QPlainTextEdit小部件 我能够将其宽度设置为6 但我想改变颜色或者它 是否可以 QFontMetrics fm font setCursorWidth fm averageCharWidth setCurs
  • Qt - ubuntu中的串口名称

    我在 Ubuntu 上查找串行端口名称时遇到问题 如您所知 为了在 Windows 上读取串口 我们可以使用以下代码 serial gt setPortName com3 但是当我在 Ubuntu 上编译这段代码时 我无法使用这段代码 se
  • Qt 和 Sqlite 示例

    我正在寻找一些使用 Qt 的示例代码 它是带有 Sqlite 驱动程序的 SQL 模块 我需要示例的主要原因是我之前有 Qt 数据库接口的经验 并且 Sqlite 在字段类型方面有一些奇怪的行为 类型是按字段存储的 而不是按列存储的 The
  • 使用 qt 创建和使用共享库

    我对共享库很陌生 所以我对如何创建 使用共享库有疑问 我正在使用 Qt Creator 和 qt 5 4 2 以及 Microsoft Visual C 11 0 编译器 在我的项目中 我需要创建一个 dll 它从外部库调用函数 有 h l
  • 从 QWebEngineView 或 QWebEnginePage 中删除滚动条

    有没有办法删除滚动条QWebEngineView或者我可以以某种方式访问 它的 ScrollArea 吗 使用 webkit 就这么简单 WebView gt page gt setScrollBarPolicy Qt Vertical Q
  • Qt:使用 QObject::connect 指定多种连接类型

    我想知道是否可以指定多种连接类型 例如 我希望我的连接类型是排队连接和唯一连接 是否可以在一份声明中具体说明这一点 QObject connect ptrSender SIGNAL ptrReceiver SLOT Queued and u
  • QDateTime::fromstring( __DATE__, "MMM d yyyy") 返回无效

    解析MSVC 预定义 DATE 也许结合 TIME 宏与 QDateTime fromstring 不返回任何内容 无效的 QDateTime 对象 为什么 From http msdn microsoft com en us librar
  • 如何使用 Qt/C++ 创建/读取/写入文件并将设置存储在程序本地

    我是一个不幸的 C 初学者 使用 Qt GUI 设计器程序似乎非常适合我的需求 但我在尝试编写所需的代码时遇到了问题 我可以使用 QSettings 字符串在硬盘驱动器上存储本地设置 但我个人讨厌程序执行某些程序所做的 HOME LOCAL
  • 如何释放Qthread对象的内存?

    我做过这样的事情 in the mainwindow s constructor QThread thr new QThread soundWorker work new soundWorker connect this SIGNAL pl
  • 从 QTableView 读取和写入文件

    如何读取和写入输入 QTableView 的文本文件日期 这就是我所拥有的 但我想在将数据添加到表中时保存数据 当然能够在重新打开应用程序时读回它 有什么教程可以参考吗 MainWindow MainWindow QWidget paren
  • 无法在 Qt Creator 中检索调试输出

    在 Windows 上的 Qt Creator 中 qDebug 语句不起作用 并且输出窗口中出现以下消息 无法检索调试输出 如何解决 如果多个 Qt Creator 实例处于活动状态 则可能会出现此问题 要解决此问题 只需关闭 Qt Cr
  • Qt 中的智能指针[重复]

    这个问题在这里已经有答案了 就像已经写过一样here http blog qt digia com 2009 08 25 count with me how many smart pointer classes does qt have Q
  • 防止 QGraphicsItem 移出 QGraphicsScene

    我有一个场景 其固定尺寸从 0 0 到 481 270 scene gt setSceneRect 0 0 481 270 在里面 我有一个习惯GraphicsItem多亏了旗帜我可以移动它ItemisMovable 但我希望它留在场景中
  • 如何在 Blackberry Cascades 中显示具有特定号码的电话板

    我正在使用带有 C QT 和 QML 的 Blackberry Cascades 10 Beta 3 SDK 以及 Blackberry 10 Dev Alpha Simulator 和 QNX Momentics IDE 并且我正在尝试实

随机推荐

  • CodeWhisperer的注册、安装与使用指南。

    CodeWhisperer是一款功能强大的代码编辑器 它支持多种编程语言 并提供了许多有用的编辑和调试功能 下面是使用CodeWhisperer 需要进行注册 安装和使用 下面是详细的指南 一 注册CodeWhisperer 在使用Code
  • [物联网方案-3]:井下作业需要检测气体类型与常见的传感器

    井下作业的主要职业危险是缺氧窒息 一氧化碳 硫化氢中毒和可燃气爆炸 其中最常见的现象是硫化氢中毒 复合式四合一气体检测仪能及时检测出井内有毒有害气体的浓度 并能自动报警 1 一氧化碳中毒 一氧化碳中毒 呼吸浅而急促 失去知觉时面颊及身上有红
  • TEASER

    本文是对文章 TEASER Fast and Certifiable Point Cloud Registration 的解读 摘要 这篇文章提出了第一个快速且可证明的算法 用于存在大量外点对应的情况下两组3D点的配准 可证明的算法尝试求解
  • Spring Boot 安全的最佳实践

    Spring Boot 安全的最佳实践 在 Web 应用程序中 安全性是至关重要的 恶意攻击者可能会利用您的应用程序中的弱点来获取敏感信息或者窃取用户数据 为了保护您的应用程序和用户数据 您需要遵循一些最佳实践 本文将介绍 Spring B
  • C#简单的制作一个窗体应用

    废话少说下面先看效果 登陆管理员 注册账号和管理账号 修改密码界面 功能界面 功能一 连接中国移动物联网平台检测温湿度 输入wendu可以查询 功能二 查看图片 功能三 读写通知管理员可以写但普通成员只可以读 功能四 计算工具 可以计算三角
  • 一百四十六、Xmanager——Xmanager5连接Xshell7并控制服务器桌面

    一 目的 由于kettle安装在Linux上 Xshell启动后需要Xmanager 而Xmanager7版本受限 没有免费版 所以就用Xmanager5去连接Xshell7 二 Xmanager5安装包来源 一 注册码 注册码 10121
  • Linux——TCP传输可靠性

    TCP传输可靠性的前提条件 重传机制 针对数据包丢失或者出现定时器超时 确认应答 停止等待协议 发送之后等待收到应答 序列号 针对数据包到达接收端主机顺序乱掉 流量控制 针对避免网络拥堵时候 针对高效传输数据包的流动窗口的控制 拥塞控制 针
  • qt中Graphic中 View的坐标和Scene的坐标不匹配的问题

    在QT中使用QGraphicView 和QGraphicsSce 时 会遇到一个这样一个问题 Scene中绘制图的坐标与View显示坐标不符 例如 直接在scene中添加直线 并且设置起点是0 0 但是我们会发现他的起点并不是0 0 如下图
  • 【数据结构入门】队列(Queue)详解(定义、销毁、入队、出队等)

    文章目录 1 前言 1 队列的概念 2 队列的结构 2 队列的实现 链式结构 1 队列的定义 2 队列的初始化 3 队列的销毁 4 入队 尾插 5 出队 头删 6 获取队列元素个数 7 获取队头元素 8 获取队尾元素 9 检查队列是否为空
  • Qt 获取程序所在路径等特殊路径的方法

    目录 经常我们的程序中需要访问一些特殊的路径 比如程序所在的路径 用户目录路径 临时文件夹等 在 Qt 中实现这几个功能所用的方法虽然都不难 但是各不相同 每次用到时还要现去查 很不方便 因此就写了这篇博客 把这几种需求的实现方式总结了一下
  • 2022春招前端最新面试题分享(牧原股份)

    牧原股份 公司及岗位信息 公司 牧原股份 岗位 前端开发工程师 地点 河南 薪资 12k 16k 面试结果 一面后暂时未接到通知 一面HR技术群面 2022 04 19 自我介绍 期望薪资 你认为你为什么值这个钱 JS常用的数据类型 分辨引
  • Spring Boot(一)

    什么是Spring Boot Spring Boot 是由 Pivotal 团队提供的全新框架 其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程 该框架使用了特定的方式来进行配置 从而使开发人员不再需要定义样板化的配置 Sp
  • UG10.0安装方法及步骤

    1 右击软件压缩包 选择解压到 UG10 64bit 选项 2 打开破解文件夹下的NX10 0 JAVA X64位exe文件 3 然后点下一步 4 下一步 5 选择安装目录 默认安装在 C Program Files Java jdk18
  • 面试华为,花了2个月才上岸,真的难呀····

    花2个月时间面试一家公司 你们觉得值吗 背景介绍 美本计算机专业 代码能力一般 之前有过两段实习以及一个学校项目经历 第一份实习是大二暑期在深圳的一家互联网公司做前端开发 第二份实习由于大三暑假回国的时间比较短 小于两个月 于是找的实习是在
  • 最大化期望算法(EM)详解

    我们知道最大似然估计的根本目的是根据抽样的到的样本 即数据 反推出最有可能的分布参数 即模型 这是一个非常典型的机器学习的思想 所以在很多领域最大似然估计有着极为广泛的应用 然而 如果已知的数据中含有某些无法观测的隐藏变量时 直接使用最大似
  • 手写Vue个人组件库———fl-Cascader

    您好 如果喜欢我的文章 可以关注我的公众号 量子前端 将不定期关注推送前端好文 接上文 封装了个人Vue组件库的Cascader级联选择器 源码附在了文章末尾 如下是文档使用说明 Cascader 级联选择器 当一个数据集合有清晰的层级结构
  • 滑动窗口的最大值java

    题目描述 给定一个数组和滑动窗口的大小 找出所有滑动窗口里数值的最大值 例如 如果输入数组 2 3 4 2 6 2 5 1 及滑动窗口的大小3 那么一共存在6个滑动窗口 他们的最大值分别为 4 4 6 6 6 5 针对数组 2 3 4 2
  • 分布式任务调度平台XXL-JOB(超详细喂嘴版)

    1 XXL JOB框架 1 0 环境 Maven3 Jdk1 8 Mysql5 7 1 1 下载源码 https github com xuxueli xxl job 1 2 中文文档 https www xuxueli com xxl j
  • Linux多线程编程---线程间同步(互斥锁、条件变量、信号量和读写锁)

    本篇博文转自http zhangxiaoya github io 2015 05 15 multi thread of c program language on linux Linux下提供了多种方式来处理线程同步 最常用的是互斥锁 条件
  • Qt5.7 Qt for Embedded Linux

    从Qt5 0开始 Qt不再包含自己的视窗系统了 QWS 对于单屏幕的情况 使用QtPlatform Abstraction是一个很好的选择 多屏的情况可以通过Wayland实现 有许多跨平台的插件可以使用 EGLFS LinuxFB KMS