嵌入式Linux Qt开发:1、搭建基于ubuntu18.04的Qt开发环境及测试(解决Qt creator输入法问题)

news2025/7/18 0:12:00

一、前言

基本在我职业生涯开始时就已经在使用Qt进行一些上位机开发了,后续也有一些嵌入式设备用Qt开发,但是一直没有完整和系列的总结,包括C++也是,这里慢慢补上一些总结,防止很多经验总结和学习过程又遗忘了,到用的时候又需要重新来一遍。

目前大多数时候我都使用C/C++/shell开发,也使用过python、lua、go、java等开发过一些软件,但是我还是对人机界面开发这种所见即所得的开发更加感兴趣,这种所见即所得的开发更能让人产生成就感,当然,这个仅仅是个人兴趣,对于产品来说,带有显示屏的嵌入式设备能提供更多更好的人机交互体验,目前车机设备、智能家居设备、工控设备等越来越多的设备都在增加显示屏。一些小的设备可以使用lvgl+mcu,稍微复杂大型一些的设备则可能使用Qt+mpu,还有一些直接使用Android设备的(Android设备一个比较大的问题是使用时间长一点之后和Android手机一样会出现比较严重的卡顿,后续要看看鸿蒙等是否在这一点上有改善,因为设备安装更换都是比较麻烦的,像我的便宜Android手机用一两年可能就卡的厉害,互联网产品开发维护和硬件产品开发维护有时候还是有比较大的区别的),扯远了,目前我同步总结lvgl、qt、Linux、mcu、freertos、音视频、网络等的一些内容便于项目上使用,lvgl的已经基本上结束了,后续可能还有一些esp32、stm32移植开发lvgl的总结,这里继续发嵌入式Qt开发的一些内容,其余的也都慢慢会发出来。

这里没有选择lvgl而是Qt是因为评估芯片的flash、内存资源足够运行Qt,项目开发周期也相对比较紧张,lvgl目前还不是很熟悉,C的一些数据结构在实现部分位置的功能时有点复杂,所以最后综合下来也是暂时使用了Qt进行开发,在ssd202的芯片上运行,带一块7寸的显示屏,有id卡读取、播放音乐、Wi-Fi链接、有线连接等,理论上也可以播放1080P的视频,只是目前暂时没有用到,目前产品生产阶段来做一些总结和回顾,便于后续更好的进行嵌入式Linux下的Qt开发。

二、搭建ubuntu18.04开发环境

为什么要在ubuntu上搭建Qt开发环境

之前我的一些文章基本上都是在windows上搭建开发环境,基本上都是开发一些上位机或者测试工具软件,但是我这里主要是针对嵌入式Linux设备上使用Qt,不选择windows而是在ubuntu18.04上搭建Qt开发环境,一方面是方便后续配置使用arm Linux的交叉编译环境直接可以交叉编译Qt项目生成嵌入式设备上的程序,另一方面是由于部分可用于检测Qt程序内存泄漏和CPU异常的工具在macoS和Windows上可能是没有的或者无法使用的,比如Valgrind

1、准备基础环境

  • ubuntu18.04

这里可以直接使用虚拟机搭建ubuntu18.04也可以直接真机安装ubuntu,由于目前大部分电脑系统都是Windows,因此建议使用虚拟机搭建ubuntu18.04,但是如果学习的时候总是忍不住想要玩Windows游戏,则建议直接真机安装ubuntu,这样来回切换系统麻烦一些也能减少玩游戏,等到专注到学习后你会发现学习到知识的成就感有时候并不比游戏带来的成就感少。

关于虚拟机安装Windows、ubuntu这些不再多说,需要的可以参考我之前的一些文章,包括Windows和macOS等系统通过虚拟机安装windows、ubuntu/centOS:

https://blog.csdn.net/weixin_39510813/article/details/75145572

https://blog.csdn.net/weixin_39510813/article/details/88562842

https://juejin.cn/post/7123365591418667016

https://juejin.cn/post/7123164977535385613

之前基本上都是用ubuntu16。04,目前由于各类软件和库的更新,基本上用ubuntu18.04比较多了,相比于以前的一些配置也有一些变化,这一点需要注意一下。

  • QT5.9/QT5.12

Qt5.9及之前的版本可以直接跳过登陆:https://download.qt.io/new_archive/qt/5.9/

Qt5.12有一键离线安装包,登陆时可以断网跳过。

后续的一些Qt版本比如5.15这些可能没有一键安装包,而且使用起来可能还是有一些比较明显的bug,所以目前我这里建议如果没有使用到一些高版本的特性功能的话直接用这两个版本学习就足够了,可能后续都需要切换到Qt6了,就像我当时接触的时候很多还是Qt4,但是目前慢慢都是Qt5,很可能随着发展基本都用Qt6了,所以学习时不必太纠结于版本,系统了解学习一下Qt开发,后续的一些其它UI开发也可以使用类似的套路去学习,就能快速掌握了。

之前的5.9.1安装有过一些总结,可以参考一下:https://juejin.cn/post/7117815582892195854

这里再针对5.12在ubuntu18.04上安装配置做一下总结。

更换ubuntu18.04的源

1、备份原来的源

sudo cp /etc/apt/sources.list /etc/apt/sources_init.list

2、使用 vim 编辑源

sudo vim /etc/apt/sources.list

3、更换为阿里的源(Ubuntu18.04)

deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse

4、更新源

sudo apt-get update

2、ubuntu18.04下安装Qt5.12

2.1、下载安装Qt5.12

目前5.12.12的下载地址:https://download.qt.io/archive/qt/5.12/5.12.12/

ubuntu下我们下载https://download.qt.io/archive/qt/5.12/5.12.12/qt-opensource-linux-x64-5.12.12.run即可。

chmod +x qt-opensource-linux-x64-5.12.12.run
./qt-opensource-linux-x64-5.12.12.run

之后会跳出安装界面,按照提示一步步向下。

这可以选择安装位置:

这里由于我们是学习所以将desktop桌面版本、Android arm64-v8a、源码source、其它的一些组件Qt Charts等都选上了,避免后面学习用到还需要重新安装:(如果你开发过程中用不到可以不用选,特别source这里占空间比较大,用不到看源码的话完全可以不用选,组件这里也是一样,很多组件实际开发的时候可能都用不到,同样Android arm64-v8a这里如果不会使用到android设备上也是不需要的)

之后一路下一步直到安装完成即可。

2.2、运行时可能的错误并启动qtcreator

可能的错误:

qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "" even though it was found.
This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.

Available platform plugins are: eglfs, linuxfb, minimal, minimalegl, offscreen, vnc, xcb.

解决方法:

sudo apt-get install libxcb1 libxcb1-dev
sudo apt-get install libx11-xcb1 libx11-xcb-dev
sudo apt-get install libxcb-xinerama0 libxcb-xinerama0-dev

然后在Qt的安装目录下找到qtcreator并运行:

或者在应用中找到qt creator运行:

2.3、创建运行示例程序

创建Widget application:

创建helloworld项目:

目前先选择qmake,可以看到也可以选择cmake和Qbs:

这里先创建mainwindow,也可以简单创建widget或者dialog:

这里语言选择中文,之前的很多版本是没有的:

这里选择desktop的,Android的需要配置一些jdk,之前有一篇文章介绍了,这里暂时不展开了,我们暂时开发桌面版本做测试:

选择git作为版本控制:

如果创建项目后无法编译,而且文件main.cpp很多报错,则需要点击项目进行项目配置:

配置发现桌面版本的kit配置不正常:

发现没有c++的编译器:

我们看到Qt自带了clang c编译器(具体可以看到是clang12),但是没有clang-c++编译器(高版本基本都不再使用gcc/g++了),我们安装后手动配置一下:

sudo apt-get install clang+

之后可以在编译栏自动搜索一下即可,目前基本都用clang了(搜索到后点击apply):

之后在kits栏选择c++的编译器:

之后DeskTop就可以选择了,选择后点击配置项目即可:

配置成功后就如下,接下来可以正常编译项目并运行了:

点击左侧的绿色三角▶️箭头直接编译运行即可,如果还是报错看下是否没有make导致的:

没有make则安装make即可:

sudo apt-get install make

如果编译时报错👎 error: cannot find -lGL(虽然你现在可能没有用到OpenGL还是会报该错误):

sudo apt-get install libgl1-mesa-dev

安装相关库和程序后重启一下qtcreator即可识别到了。

没有错误则可以正常运行起来:

我们加一下helloworld的label显示:

3、安装输入法及解决Qt使用中文的问题

接下来我们需要在ubuntu上安装中文输入法以及Qt creator无法使用中文输入法输入中文的问题,安装中文输入法比较简单:

3.1、安装中文在 Ubuntu 18.04 上安装中文输入法通常可以通过以下步骤完成:
1. 更新软件源

打开终端,首先确保系统软件源是最新的:

sudo apt update
2. 安装 fcitx 输入法框架

在 Ubuntu 上,fcitx 是常用的中文输入法框架之一。你可以使用以下命令来安装它及其中文输入法支持包(例如 fcitx-pinyinfcitx-sunpinyin):

sudo apt install fcitx fcitx-pinyin fcitx-googlepinyin
3. 安装中文语言支持

通过以下命令安装中文语言支持:

sudo apt install language-pack-zh-hans
4. 设置 fcitx 为默认输入法框架

你可以通过图形界面进行设置,或者在终端中手动配置。

图形界面配置:
  1. 打开“设置”应用。
  2. 进入“区域与语言”选项。
  3. 在“管理已安装的语言”中,将语言切换到中文(简体)并应用。
  4. 重启系统或注销重新登录。

手动配置:

使用以下命令打开配置文件:

sudo vim /etc/environment

将以下内容添加到文件末尾:

GTK_IM_MODULE=fcitx
QT_IM_MODULE=fcitx
XMODIFIERS=@im=fcitx

保存并退出。

5. 重新启动系统

重启系统以应用设置。

6. 启动并配置 fcitx

重启后,输入法应该会自动启动。如果没有,你可以手动启动 fcitx

fcitx

你可以通过任务栏中的 fcitx 图标来配置输入法,包括切换输入法和调整输入法的快捷键等。

  • 启动输入法

  • 配置输入法

  • 添加和删除一些输入法,保留英文和中文两个输入法用于切换不同输入场景

  • 配置输入法切换快捷键

  • mac虚拟机的话可以选择配置ctrl+shift+>(因为command和option比较特殊)全局的话就是针对全局切换的,局部的话就针对这一个局部的窗口或操作,还会切回来

  • 结果

3.2、Qt creator配置使用中文输入法

虽然中文输入法有了,vim等都可以操作了,但是你会发现Qt creator打开后还是无法使用中文输入法。

  • 1. 确保

/opt/Qt5.12.2/5.12.2/gcc_64/plugins/platforminputcontexts/

/opt/Qt5.12.2/Tools/QtCreator/lib/Qt/plugins/platforminputcontexts/

目录下存在libfcitxplatforminputcontextplugin.so文件,并且有可执行权限;

  • 2. 如果没有该文件的话,请执行 sudo apt-get install fcitx-frontend-qt5 安装,并从 /usr/lib/x86_64-linux-gnu/qt5/plugins/platforminputcontexts/libfcitxplatforminputcontextplugin.so 拷贝到上述两个目录,赋予执行权限;
sudo cp libfcitxplatforminputcontextplugin.so /opt/Qt5.12.2/Tools/QtCreator/lib/Qt/plugins/platforminputcontexts/
sudo cp libfcitxplatforminputcontextplugin.so /opt/Qt5.12.2/5.12.2/gcc_64/plugins/platforminputcontexts/
  • 3.如果执行完上述操作后,重启Qtcreator依然无法输入中文,请执行 sudo gedit /etc/profile ,在打开的文件尾部添加以下内容:
export XIM_PROGRAM=fcitx
export XIM=fcitx
export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export XMODIFIERS="@im=fcitx"

然后注销,重启或者source /etc/profile就可以了。

如果root权限启动不正常可以试一下普通用户是否可以正常使用。

三、最后

接下来我们说一下Qt Designer使用和信号槽机制,再总结一下各个控件的样式和使用以及布局,封装一些常用的文件、网络等应用接口调用,做一些硬件交互接口封装调用示例,这些基本上就算是系统性的完成了嵌入式LinuxQt的总结,之后就是一些零星的比较特殊的Qt信号槽妙用,复杂的样式绘制,由于目前主要是嵌入式Linux下用,这里的总结不会涉及到opencv、opengl等比较复杂庞大的库的调用,也会说一下一般嵌入式Linux下Qt开发需要的flash和内存的一些要求,嵌入式设备下的滑动屏效果实现,一些小控件的自定义便于在小显示屏上显示的技巧等,更多的嵌入式、Linux的内容还需要一些其它系统总结来呈现。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2376701.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

element-ui的el-cascader增加全选按钮实现(附源码)

最近遇到了在级联选择器上添加全选框的需求 ,但是项目使用的是Vue2 Element UI的架构,而我们都知道Element UI提供的级联选择器el-cascader是不支持全选框的,而我又没有在网上找到适合我项目的实现,索性自己实现一个组件&#xf…

Scratch游戏 | 企鹅大乱斗

有没有过无聊到抓狂的时刻?试试这款 企鹅大乱斗 吧!超简单的玩法,让你瞬间告别无聊! 🎮 玩法超简单 等待屏幕出现 ”Go!” 疯狂点击,疯狂拍打企鹅! 💥 游戏特色 解压神器&#x…

Uniapp中小程序调用腾讯地图(获取定位地址)

1、先配置权限: 这是上图的代码: "permission": { "scope.userLocation": { "desc": "你的位置信息将用于小程序位置接口的效果展示" } } 第二步:写代码: //下面是uniapp的模版代码 主…

2025全网首发:ComfyUI整合GPT-Image-1完全指南 - 8步实现AI图像创作革命

ComfyUI整合GPT-Image-1完全指南:8步实现AI图像创作革命【2025最新】 OpenAI最新发布的GPT-Image-1模型(也就是ChatGPT-4o背后的图像生成技术)已经通过API开放使用,而令人惊喜的是,ComfyUI已经第一时间提供了完整支持&…

工业4.0神经嫁接术:ethernet ip转profinet协议通信步骤图解

在现代工业自动化领域,不同品牌的设备和协议之间的兼容性问题一直是个挑战。我们的包装线项目就遇到了这样的难题:需要将Rockwell Allen-Bradley的EtherNet/IP伺服系统与西门子PLC的PROFINET主站进行无缝对接。为了解决这一问题,我们采用了et…

【Linux】动静态库的使用

📝前言: 这篇文章我们来讲讲Linux——动静态库的使用 🎬个人简介:努力学习ing 📋个人专栏:Linux 🎀CSDN主页 愚润求学 🌄其他专栏:C学习笔记,C语言入门基础&…

Java基础(网络编程)

一、概述 目的:网络通信: 1、设备和设备 2、进程和进程 1)不同设备之间 2)本地设备之间 需要解决的问题: 如何准确地发送到对方的主机 - IP地址 - 唯一的定位网络中的一台主机 如何准确的发送到对方主机的进程 -…

计量——异方差的检验及其修正

目录 1.异方差的检验 1 BP检验 2white检验 2.异方差的修正 1.异方差的检验 1 BP检验 选择检验方法:BP BP检验的实际步骤(非机器): 1.y对所有x进行回归,得到残差u。计算残差的平方u^2 2.u^2对所有x进行回归&#…

学习C++的好书:C++编程之禅

历时四个月,把这本书看了一遍,受益匪浅,推荐给大家,系统的学习一遍C。

OpenCV进阶操作:人脸检测、微笑检测

文章目录 前言一、OpenCV如何实现人脸检测1、haar特征2、级联分类器3、级联分类器的使用 二、人脸检测、微笑检测 案例实现1、预处理2、加载分类器3、标注人脸4、运行结果:4、微笑检测 总结 前言 要实现人脸识别首先要判断当前图像中是否出现了人脸,这就…

车载诊断进阶篇 --- 车载诊断概念

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 钝感力的“钝”,不是木讷、迟钝,而是直面困境的韧劲和耐力,是面对外界噪音的通透淡然。 生活中有两种人,一种人格外在意别人的眼光;另一种人无论…

制作一款打飞机游戏49:敌人抖动

蛇形敌人 如果你玩过一些射击游戏(shmups),尤其是老式的射击游戏,你可能会遇到一种敌人,它们像蛇一样移动。我想在我们的游戏中实现这种效果。这种动态的感觉非常棒,我们完全有能力通过动画来实现它。 方…

Pycharm IDEA加载大文件时报错:The file size exceeds configured limit

解决方案:配置一下idea.properties文件 文件里面写入代码: idea.max.intellisense.filesize50000重启IDEA即可;

PDA手持终端应用有哪些?

随着技术进步不断拓展,PDA手持终端其便携性与多功能特性使其成为多行业数字化转型的核心工具。主要包括物流与仓储管理、零售行业、医疗行业以及制造业等。 1.物流与仓储管理 在物流与仓储管理中,PDA手持终端主要用于物品的实时跟踪、库存管理和拣货作业…

Python+Selenium爬虫:豆瓣登录反反爬策略解析

1. 引言 在当今互联网时代&#xff0c;数据抓取&#xff08;爬虫&#xff09;技术广泛应用于数据分析、市场调研、自动化测试等领域。然而&#xff0c;许多网站采用动态加载技术&#xff08;如Ajax、React、Vue.js等框架&#xff09;来渲染页面&#xff0c;传统的**<font s…

电总协议调试助手更新-PowerBus-v1.0.5

电总协议调试助手&#xff0c;该工具主要是用于打包电总协议&#xff0c;用于电总协议的设备调试&#xff08;精密空调、UPS、基站电源等等&#xff09;。电总协议校验计算、编码转换比较麻烦&#xff0c;手动组包困难&#xff0c;使用该工具可以大大提高调试效率。 Ver1.0.5版…

技术文档:变频器干扰问题与解决方案

1. 引言 在现代工业自动化系统中&#xff0c;变频器&#xff08;Variable Frequency Drive, VFD&#xff09;因其高效节能和精确调速的特点被广泛应用于电机控制。然而&#xff0c;变频器在运行过程中会产生高频电磁干扰&#xff08;EMI&#xff09;&#xff0c;对周边设备如P…

2025认证杯数学建模C题思路+代码+模型:化工厂生产流程的预测和控制

2025认证杯数学建模C题思路代码模型&#xff0c;详细内容见文末名片 在化工厂的生产流程中&#xff0c;往往涉及到多个反应釜、管道和储罐等设备。在 流水线上也有每个位置的温度、压力、流量等诸多参数。只有参数处于正常范 围时&#xff0c;最终的产物才是合格的。这些参数…

亚马逊,temu测评采购低成本养号策略:如何用一台设备安全批量管理买家账号

只要能够巧妙规避平台的检测和风控措施&#xff0c;测评便可安全进行。 自养号测评&#xff0c;它更便于卖家掌控&#xff0c;且能降低风险。现在很多卖家都是自己养号&#xff0c;自己养号都是精养&#xff0c;不是自动的机刷&#xff0c;买家账号掌握在自己手里&#xff0c;更…

SiFli-SDK 编译

1.编译报错 scons: *** No SConstruct file found. 出现这个错误是没有正确进入到工程目录执行编译命令&#xff0c;例如应该进入project目录中。 2.scons: *** [build_em-lb525_hcpu\src\resource\strings\en_us.c] AttributeError : dict object has no attribute iteritem…