C++在Linux下的图形界面编程入门

上周有客户问我,如何在Linux系统下使用C++进行GUI开发?我直接推荐他尝试Qt框架。
这东西确实是一件神器。
下面我就给大家详细介绍一下入门指南。

首先需要准备环境。
首先您需要安装Linux系统,例如Ubuntu、Fedora或Debian,并确保您的系统版本可以支持Qt开发工具。
然后,打开终端并使用以下命令安装 Qt 编译器和库:
bash 须藤apt更新 sudo apt install build-essential qtbase5 -dev
如果需要QtCreator这样的集成开发环境,也可以直接安装:
bash sudo apt install qtcreator
接下来,使用QtCreator开发GUI。
首先创建一个Qt项目,打开QtCreator,选择“文件”然后“新建文件或项目”,然后选择“应用程序”下的“QtWidgets应用程序”,输入项目的名称和路径并选择构建包,例如“Desktop Qt5 .x.x GCC”。

设计界面时,双击项目中的.ui文件,使用QtDesigner绘制组件并调整属性。
接下来,在 main.cpp 中编写代码来初始化应用程序和主窗口。

例如,如果您想要一个带有按钮的窗口,然后单击该按钮关闭该窗口,代码可能如下所示:
cpp 包括 包括 包括
int main(int argc, char argv[]) { QApplication应用程序(argc,argv); QMainWindow 窗口; window.setWindowTitle("关闭按钮示例"); window.resize(3 00, 2 00);
按钮 QPushButton("点击关闭", &window); 按钮.setGeometry(1 00, 8 0, 1 00, 3 0); QObject::bind(&button, &QPushButton::clicked, &window, &QMainWindow::close);
window.show(); 返回app.exec();
编译和运行也很简单。
在QtCreator中,点击左下角绿色的运行按钮,就会自动编译并运行。
如果使用终端命令,应该先使用qmake生成Makefile,然后编译,最后运行:
bash qmake 做 ./yourapp
或者,如果您使用 CMake,请首先配置 CMakeLists.txt,然后运行:
bash 来吧 做 ./yourapp
进阶学习可以看一下Qt的核心模块,比如QtWidgets、QtQuick/QML以及信号槽机制。
官方文档、书籍和在线教程都非常优秀。
调试时,可以使用qDebug()输出调试信息或通过QtCreator调试器设置断点。

无论如何,这取决于你,这只是一个介绍性指南。
Qt的模块化设计和丰富的API可以支持简单工具快速开发成复杂的应用程序。
花点时间,多练习,你一定会掌握的。

嵌入式linux中使用gtk为界面的多,还是qt多?

好吧,我了解这个情况。

你看,现在是2 02 2 年了,有很多人在从事嵌入式Linux的工作,而且大多数人都选择了Qt。
为什么?
Qt,它的跨平台功能真是强大。
无论您使用什么Linux板,例如Raspberry Pi或某些工业PC,用Qt编写都可以轻松移植。
它还具有完整的 API。
不管你想做什么,基本上都已经准备好了。
社区也很热闹。
如果您发布问题,有人可能会在当天回复您。

我们来谈谈界面。
例如2 02 2 年上市的汽车中的GPS导航系统,或者一些工业控制面板,对界面的要求很高,必须美观且交互流畅。
Qt 在这方面很棒,有很多控件,可以轻松创建样式表,并且有硬件加速,因此运行起来很流畅。
想一想,像这样的大屏幕如果冻结一段时间,用户肯定会停止使用它。

GTK也是老牌子了,不过感觉在嵌入式领域没有Qt那么常用。
GTK 更面向桌面,并且被 GNOME 等桌面使用。
在嵌入式系统中使用时,你可能会觉得控件或者风格有点不对劲?比如我2 02 2 年在一家工厂看到的小型数据监控盒就采用了Qt技术。
感觉顺眼,不过GTK可能没有那么打磨。

开发效率也很重要。
Qt 文档看起来非常好,有很多示例。
我有一个朋友正在做2 02 2 年的项目。
他使用Qt,说打字速度很快,尤其是自定义动画之类的,而且感觉工具链也很完整。
社会问题很多,可以很快解决。
GTK的文档也不错,但是有时候东西不太好找。

所以,总的来说,到2 02 2 年,在嵌入式Linux系统中,将会有很多应用程序使用Qt作为接口,这就是原因。
看起来各方面都比较符合嵌入式开发的需求。
嗯,也许情况就是这样。

linux下,qt编译的程序需要哪些依赖库

说实话,在Linux上编译和依赖Qt程序是相当复杂的。
第一次做的时候,我赤脚跑了几次,每次都感觉自己在泥巴里打滚。

我们来谈谈编译时堆积的东西。
例如,我在编译Qt5 .3 时遇到了一个陷阱。
您需要安装基本的工具链,例如 GCC 和 G++,并且需要安装 build-essential。
接下来,您还需要更新图形相关的库,例如 libgl1 -mesa-dev。
如果不更新的话OpenGL渲染会直接崩溃。
还需要 X1 1 库。
否则不会弹出窗口。
我几乎忘记了字体渲染、libfontconfig1 -dev 和 libfreetype6 -dev。
如果未安装这些,界面上的文本将保持方形。
正因为如此,我的一个朋友来找我,问我为什么程序黑屏。
原来是字体库没有安装。

有趣的是,不同版本的 Qt 可以有非常不同的依赖关系。
后来,当我开发Qt 6 .7 .3 时,我发现它比5 .3 多了一些库。
它们在官方文档中有明确说明。
这个时候,你需要非常小心。
否则编译会失败,因为它没有安装,实在是浪费时间。

我们来谈谈程序运行时依赖关系。
这应该使用 ldd 命令进行验证。
例如,您可以编译一个名为 myapp 的程序,然后运行 ​​ldd ./myapp 来查看它依赖于哪些 .so 文件。
常见的包括底层的libQt5 Core.so。
libQt5 Gui.so 和 libQt5 Widgets.so。
负责接口。
网络通信、数据库、多媒体都是扩展库。
我有一个使用数据库的项目,我发现ldd需要能够识别libQt5 Sql.so。
不然连接数据库的时候会直接爆炸。
此时,您可以安装现成的软件包(例如 qt5 -default),也可以手动将库文件插入到 /usr/lib 或程序本身运行的目录中。

我也遇到了第三方库的问题。
例如,我有一个使用自定义 .so 文件的程序,但最初它总是说找不到该文件。
直到后来我才想起来,要么把.so文件和程序放在一起,要么改变LD_LIBRARY_PATH环境变量。
还有兼容性问题。
例如,Python 的 .so 模块必须与系统的 Python 版本和 Qt 的 Python 绑定(例如 PyQt5 )匹配。
如果不匹配,就会执行一堆乱码。
我有一个项目,因为Python版本与Qt不匹配。
调试了好久,终于发现是环境变量设置不正确。

最后,配置动态链接器。
这其实非常重要,只是很多人没有意识到。
我曾经有一个程序无法在别人的机器上运行。
我检查了一下,发现动态链接器缓存没有更新。
只需运行 sudo ldconfig 即可完成。
如果您的系统上找不到该库,您也可以手动创建 /etc/ld.so.conf。
或者,您可以创建一个新的 .conf 文件并将其放置在 /etc/ld.so.conf.d/ 中,ldconfig 将重新加载配置。

说实话,版本兼容也挺麻烦的。
例如,旧版本的 Qt5 .3 有许多安全漏洞,并且不再支持许多较新的系统。
如果可能的话,我们建议至少使用 Qt6 .x 进行升级,它具有更好的兼容性和性能。
这在部署过程中也尤为重要。
您必须打包所有依赖项或为您的用户创建安装脚本。
有一个项目专门用于此目的。
由于用户环境中缺少库,程序直接崩溃。
如果你的代码写得不好,用户会骂你。
其实我没有考虑部署依赖。

换句话来说,要在Linux上编译和运行Qt,你需要了解依赖链。
如果不存在正确的对,程序将无法编译或在运行时崩溃。

嵌入式开发学QT好,还是继续深入LINUX好

上星期。
我的那个朋友。
嵌入式开发。
QT 和 Linux。
都必须学习。

QT。
好的。
图形用户界面开发。
快速开始。
跨平台。
Windows Linux macOS。
社区很大。
有很多资源。
Linux。
没关系。
系统级开发。
内核驱动程序。
走到底部。
开源社区。
公牛。

选择哪一个?这取决于需要。

例如:2 02 3 年。
创建一个带有屏幕的设备。
用户活动。
选择 QT。
界面友好。
有利。

例如,你想开发一个路由器。
一楼。
选择Linux。
驾驶。
核。
一定可以。

我只是想到了别的事。
学习Linux。
更难了。
嵌入式。
Linux 是平台。
精通Linux。
有很多机会。

这取决于你。