在远程非桌面版Ubuntu中使用Qt5构建Hello World项目
在 Linux 下运行 Qt 应用程序,需要完成以下几个步骤,包括安装 Qt 工具、设置开发环境以及编译和运行项目。下面是详细的步骤:
1. 安装 Qt
1.1使用系统包管理器
sudo apt update 和 sudo apt install qt5-default qtcreator 命令用于更新 Ubuntu 的软件包列表并安装 Qt 5 的默认库以及 Qt Creator IDE。这些命令在桌面版和非桌面版(如 Ubuntu Server)的 Ubuntu 上都可以运行,但使用体验会有所不同。
sudo apt update
sudo apt install qt5-default qtcreator
-
图形环境:非桌面版的 Ubuntu 默认没有图形用户界面(GUI)。Qt Creator 是一个图形界面的集成开发环境(IDE),因此,如果您想在非桌面版上直接使用它,您需要安装和配置一个图形环境,如 X11 服务器(例如 Xvfb)或通过 SSH X11 转发。
-
远程开发:如果您不打算在非桌面版 Ubuntu 上运行图形界面,您仍然可以安装 Qt 库(
qt5-default)以进行 Qt 应用程序的开发。在这种情况下,您可以在另一台计算机上使用 Qt Creator,并将项目配置为远程编译和运行在非桌面版 Ubuntu 上。 -
命令行工具:对于非桌面环境,您可能更倾向于使用命令行工具(如
qmake和make)来编译和管理您的 Qt 项目。这些工具随qt5-default包一起安装,无需图形界面即可使用。
1.2使用 Qt Online Installer (桌面版) 具体访问Qt官网
2. 安装开发工具
确保安装了编译工具,如 g++ 和 make。可以使用以下命令安装:
sudo apt install build-essential
build-essential 是一个元包,它包含了编译 C 和 C++ 应用程序所需的一系列工具和库。具体来说,它包括:
- GNU 编译器集合(gcc 和 g++)
- make 工具
- 其他必要的库和开发工具
3. 安装 X 虚拟帧缓冲(Xvfb)(可选)
在服务器环境下没有图形界面,因此可以安装 X 虚拟帧缓冲(Xvfb)来模拟图形环境,以便运行 Qt 应用程序。
sudo apt install xvfb
4. 设置环境变量(不需要)
为了让Linux系统知道 Qt 的安装位置,还需要设置环境变量。假设你将 Qt 安装在 /opt/Qt 目录下:
export PATH=/opt/Qt/Tools/QtCreator/bin:/opt/Qt/5.15.2/gcc_64/bin:$PATH
但是请注意 :
- 使用
apt安装 Qt 时:一般不需要手动添加路径,系统会自动处理好。 - 手动安装 Qt时:可能需要手动设置
PATH环境变量,具体取决于安装位置。
使用 apt 安装 qt5-default 和 qtcreator 时,Qt 和 Qt Creator 通常会安装在系统的标准目录中(例如 /usr/include/qt5 和 /usr/lib/x86_64-linux-gnu/qt5),这些目录通常已经包含在系统的库路径和头文件搜索路径里。在通过 apt 安装的情况下,Qt Creator 的可执行文件也会放在 /usr/bin 中,这个路径默认是包含在系统的 PATH 环境变量中的。
5. 构建"Hello World"项目
5.1. 创建project项目
首先,为你的项目创建一个目录,例如 project:
mkdir project
cd project
5.2. 创建 .pro 文件
在项目目录中创建一个 .pro 文件。你可以使用 qmake 的 -project 选项来生成一个基本的 .pro 文件,但也可以手动创建和编辑这个文件。
手动创建 .pro 文件
创建一个名为 hello.pro 的文件,并在其中添加以下内容:
QT += core
QT -= guiCONFIG += c++11TARGET = hello
TEMPLATE = appSOURCES += main.cpp
这个 .pro 文件配置了项目的基本设置:
- 使用 Qt Core 模块。
- 不使用 Qt GUI 模块。
- 启用 C++11 特性。
- 目标文件名为 hello。
- 项目模板为应用程序。
- 包含一个源文件
main.cpp。
QT += core:
指定该项目使用 Qt Core 模块。Qt Core 模块提供了构建 Qt 应用程序的基本功能,如事件循环、信号与槽、时间管理等。
QT -= gui:
取消使用 Qt GUI 模块。这意味着该项目不使用图形用户界面相关的功能。通常在构建命令行工具或服务器应用程序时会这么做。
CONFIG += c++11:
启用 C++11 特性,允许使用 C++11 提供的语法和库功能。C++11 引入了一些新特性,如智能指针、范围 for 循环、lambda 表达式等。
TARGET = hello:
指定生成的可执行文件的名称为 hello。这个名称将在构建后生成对应的可执行文件。
TEMPLATE = app:
指定该项目的模板类型为应用程序。app 意味着这是一个完整的可执行应用程序,而不是一个库或其他类型的构建。
SOURCES += main.cpp:
指定项目的源文件。这里指定了一个名为 main.cpp 的源文件,该文件中包含项目的实现代码。
5.3. 创建源文件并生成Makefile
在项目目录中创建一个名为 main.cpp 的文件,并添加一些简单的代码。例如:
#include <QCoreApplication>
#include <QDebug>int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);qDebug() << "Hello, Qt!";return a.exec();
}
这个代码创建了一个简单的 Qt 应用程序,输出 “Hello, Qt!”。
在项目目录中运行以下命令来生成 Makefile:
qmake
qmake 会读取 .pro 文件并生成相应的 Makefile。
5.5. 编译并运行项目
使用 make 命令编译项目:
make
这将生成可执行文件 hello 在当前目录中。你可以使用 ./ 运算符运行生成的可执行文件:
./hello
如果一切正常,你将看到输出:
Hello, Qt!
6. 解决依赖问题
如果你在运行时遇到依赖问题(如缺少动态库),可以通过以下命令进行修复:
sudo apt install <missing-library-name>
通常,可以通过系统的包管理器找到所需的库。例如,如果缺少 libQt5Widgets.so 等,可以安装以下包:
sudo apt install libqt5widgets5
总结
- 安装 Qt:通过系统包管理器安装 Qt。
- 安装开发工具:安装所需的编译工具。
- 创建并编写 Qt 项目:创建新项目并编辑代码。
- 编译和运行:通过终端手动执行构建和运行命令。
相关文章:
在远程非桌面版Ubuntu中使用Qt5构建Hello World项目
在 Linux 下运行 Qt 应用程序,需要完成以下几个步骤,包括安装 Qt 工具、设置开发环境以及编译和运行项目。下面是详细的步骤: 1. 安装 Qt 1.1使用系统包管理器 sudo apt update 和 sudo apt install qt5-default qtcreator 命令用于更新 U…...
netty之基础aio,bio,nio
前言 在Java中,提供了一些关于使用IO的API,可以供开发者来读写外部数据和文件,我们称这些API为Java IO。IO是Java中比较重要知识点,且比较难学习的知识点。并且随着Java的发展为提供更好的数据传输性能,目前有三种IO共…...
在找工作吗?给你一个AI虚拟面试官助力你提前准备面试
大家好,我是Shelly,一个专注于输出AI工具和科技前沿内容的AI应用教练,体验过300款以上的AI应用工具。关注科技及大模型领域对社会的影响10年。关注我一起驾驭AI工具,拥抱AI时代的到来。 让AI点亮我们的生活,是Shelly对…...
@KafkaListener注解中containerFactory属性的作用
在使用Spring Kafka时,containerFactory 属性是 KafkaListener 注解中的一个选项,它允许你指定一个 ContainerFactory Bean 的名称。这个 ContainerFactory 负责创建和管理 Kafka 消息监听容器。 以下是 containerFactory 属性的一些关键作用࿱…...
1006C简单题(计数式子的组合意义 + dp式子联立)
http://cplusoj.com/d/senior/p/SS241006C 对于这个式子,我们可以从它的组合意义入手。 假设我们有 n 1 n1 n1 个白球要染色,中间有一个绿球,绿球左边有 a a a 个红球,右边有 b b b 球。染完后绿球左边每个白球有 x x x 的贡…...
千益畅行,旅游创业新模式的创新与发展
旅游创业的时代背景与旅游卡的崛起,在当今快节奏的时代,旅行成为人们生活中的重要部分,随着科技发展和市场需求的变化,旅游创业项目中的旅游卡应运而生。 其中,“千益畅行” 旅游卡作为新兴力量,在共享经济…...
单调栈day54|42. 接雨水(高频面试题)、84. 柱状图中最大的矩形、两道题思维导图的汇总与对比
单调栈day54|42. 接雨水(高频面试题)、84. 柱状图中最大的矩形、两道题思维导图的汇总与对比 42. 接雨水84. 柱状图中最大的矩形两道题思维导图的汇总与对比 42. 接雨水 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱…...
关于Excel将列号由字母改为数字
将Excel的列表由字母改为数字 步骤: 文件-选项-公式-勾选“使用公式”中的“R1C1引用样式(R)”-确定即可 部分步骤图示 设置前的样子 设置后的样子 虽然现在还不清楚在xlwings操作Excel时有什么作用,先留着吧。...
曾黎第二次受邀巴黎时装周看秀 为新疆棉代言引人瞩目
近日,演员曾黎受邀出席巴黎时装周Stella McCartney 2025春夏大秀,她身穿品牌25早春“超季”新装登场,干练的摩登蓝色西服,自信优雅,温婉大气,手提链条黑包上面绑着的一朵新疆棉花十分抢眼,成为全…...
No.6 笔记 | Linux操作系统基础:全面概览与核心要点
1. 简介与历史 1.1 起源 创始人:Linus Torvalds(芬兰赫尔辛基大学学生)初衷:设计一个替代Minix的全功能Unix操作系统首次发布:1991年10月5日,Linux v0.01版本 2. Linux特点 多用户多任务:用…...
MySQL之分库分表后带来的“副作用”你是怎么解决的?
目录标题 一、垂直分表后带来的隐患二、水平分表后带来的问题1.多表联查问题2.增删改数据问题3.聚合操作问题 三、垂直分库后产生的问题1.跨库join问题2.分布式事务问题3.部分业务库依然存在的性能问题 四、水平分库后需要解决的问题1.聚合操作和连表问题2.数据分页问题3.ID主键…...
【Python】Python-JOSE:Python 中的 JSON Web Token 处理库
Python-JOSE 是一个用于处理 JSON Web Token (JWT) 和 JOSE (JSON Object Signing and Encryption) 标准的 Python 库。它支持对 JWT 进行签名、加密、解密和验证等操作,是处理基于 OAuth 2.0 和 OpenID Connect 协议的身份验证和授权任务的理想选择。Python-JOSE 实…...
SpringBoot3+Druid YAML配置
背景 Druid连接池是阿里巴巴开源的数据库连接池项目。Druid连接池为监控而生,内置强大的监控功能,监控特性不影响性能。功能强大,能防SQL注入,内置Loging能诊断Hack应用行为。现在已经SpringBoot3,Druid的配置也需要随…...
【c语言——指针详解(3)】
文章目录 一、字符指针变量二、数组指针变量1、 数组指针变量是什么?2、 数组指针变量怎么初始化 三、⼆维数组传参的本质四、函数指针变量1、函数指针变量的创建2、函数指针变量的使⽤3、两段有趣的代码1)typedef 关键字2)typedef和define的…...
QT系统学习篇(2)- Qt跨平台GUI原理机制
一、Qt工程管理 1、新建项目: 我们程序员新建项目对话框所有5类项目模板 Application: Qt的应用程序,包含Qt Quick和普通窗口程序。 Library: 它可以创建动态库、静态库、Qt Creator自身插件、Qt Quick扩展插件。 其他项目: 创建单元测试项目、子目录项…...
运用MinIO技术服务器实现文件上传——在Linux系统上安装和启动(一)
# MinIO 单机版环境搭建详解 ## 1. 简介 随着大数据时代的到来,数据存储的需求日益增大,如何有效地存储和管理大规模的非结构化数据成为许多企业和开发者面临的挑战。MinIO 作为一个高性能、分布式对象存储系统,致力于为用户提供简单、快速…...
Python技术深度探索:从基础到进阶的实践之旅(第一篇)
Python技术深度探索:从基础到进阶的实践之旅(第一篇) 在编程的世界里,Python以其简洁的语法、强大的库支持和广泛的应用领域,成为了无数开发者心中的“瑞士军刀”。无论是数据分析、机器学习、Web开发,还是…...
利士策分享,旅游是否要舟车劳顿才能尽兴?
利士策分享,旅游是否要舟车劳顿才能尽兴? 国庆假期,当夜幕降临,城市灯火阑珊,一场关于美食与等待的较量悄然上演。 李女士在北京天坛公园附近餐厅的等位经历——前方1053桌的壮观景象,不仅让人咋舌…...
C++入门——类的默认成员函数(取地址运算符重载)
文章目录 一、const成员函数二、取地址运算符重载总结 一、const成员函数 1.将const修饰的成员函数称之为const成员函数,const修饰成员函数放到成员函数参数列表的后⾯。2.const实际修饰该成员函数隐含的this指针,表明在该成员函数中不能对类的任何成员进…...
学习记录:js算法(四十九):二叉树的层序遍历
文章目录 二叉树的层序遍历网上思路队列循环 总结 二叉树的层序遍历 给你二叉树的根节点 root ,返回其节点值的层序遍历 。 (即逐层地,从左到右访问所有节点)。 图一: 示例 1:如图一 输入:roo…...
未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?
编辑:陈萍萍的公主一点人工一点智能 未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战,在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...
测试微信模版消息推送
进入“开发接口管理”--“公众平台测试账号”,无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息: 关注测试号:扫二维码关注测试号。 发送模版消息: import requests da…...
label-studio的使用教程(导入本地路径)
文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...
树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频
使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...
逻辑回归:给不确定性划界的分类大师
想象你是一名医生。面对患者的检查报告(肿瘤大小、血液指标),你需要做出一个**决定性判断**:恶性还是良性?这种“非黑即白”的抉择,正是**逻辑回归(Logistic Regression)** 的战场&a…...
Python:操作 Excel 折叠
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...
Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)
目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...
pam_env.so模块配置解析
在PAM(Pluggable Authentication Modules)配置中, /etc/pam.d/su 文件相关配置含义如下: 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块,负责验证用户身份&am…...
什么是库存周转?如何用进销存系统提高库存周转率?
你可能听说过这样一句话: “利润不是赚出来的,是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业,很多企业看着销售不错,账上却没钱、利润也不见了,一翻库存才发现: 一堆卖不动的旧货…...
相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...
