在远程非桌面版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…...
python如何将word的doc另存为docx
将 DOCX 文件另存为 DOCX 格式(Python 实现) 在 Python 中,你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是,.doc 是旧的 Word 格式,而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...
04-初识css
一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...
Map相关知识
数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...
AspectJ 在 Android 中的完整使用指南
一、环境配置(Gradle 7.0 适配) 1. 项目级 build.gradle // 注意:沪江插件已停更,推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...
GC1808高性能24位立体声音频ADC芯片解析
1. 芯片概述 GC1808是一款24位立体声音频模数转换器(ADC),支持8kHz~96kHz采样率,集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器,适用于高保真音频采集场景。 2. 核心特性 高精度:24位分辨率,…...
2023赣州旅游投资集团
单选题 1.“不登高山,不知天之高也;不临深溪,不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...
蓝桥杯 冶炼金属
原题目链接 🔧 冶炼金属转换率推测题解 📜 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V,是一个正整数,表示每 V V V 个普通金属 O O O 可以冶炼出 …...
【生成模型】视频生成论文调研
工作清单 上游应用方向:控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...
【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)
本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...
基于PHP的连锁酒店管理系统
有需要请加文章底部Q哦 可远程调试 基于PHP的连锁酒店管理系统 一 介绍 连锁酒店管理系统基于原生PHP开发,数据库mysql,前端bootstrap。系统角色分为用户和管理员。 技术栈 phpmysqlbootstrapphpstudyvscode 二 功能 用户 1 注册/登录/注销 2 个人中…...
