在远程非桌面版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
  1. 图形环境:非桌面版的 Ubuntu 默认没有图形用户界面(GUI)。Qt Creator 是一个图形界面的集成开发环境(IDE),因此,如果您想在非桌面版上直接使用它,您需要安装和配置一个图形环境,如 X11 服务器(例如 Xvfb)或通过 SSH X11 转发。

  2. 远程开发:如果您不打算在非桌面版 Ubuntu 上运行图形界面,您仍然可以安装 Qt 库(qt5-default)以进行 Qt 应用程序的开发。在这种情况下,您可以在另一台计算机上使用 Qt Creator,并将项目配置为远程编译和运行在非桌面版 Ubuntu 上。

  3. 命令行工具:对于非桌面环境,您可能更倾向于使用命令行工具(如 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

总结

  1. 安装 Qt:通过系统包管理器安装 Qt。
  2. 安装开发工具:安装所需的编译工具。
  3. 创建并编写 Qt 项目:创建新项目并编辑代码。
  4. 编译和运行:通过终端手动执行构建和运行命令。

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

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

相关文章

儿童需要学习C++多久才能参加信息学奥赛的CSP-J比赛?

信息学奥赛&#xff08;NOI&#xff09;是国内编程竞赛领域的顶尖赛事&#xff0c;而对于初学者来说&#xff0c;参加NOI的第一步通常是通过CSP-J&#xff08;全国青少年信息学奥林匹克联赛初赛&#xff09;&#xff0c;这也是面向青少年程序员的入门级竞赛。作为信息学奥赛的基…

【解决办法】git clone报错unable to access ‘xxx‘: SSL certificate problem:

使用git clone 时报错unable to access xxx: SSL certificate problem: 这个报错通常是由于SSL证书问题引起的。通常可以按照以下步骤进行排查&#xff1a; 检查网络连接&#xff1a;确保你的网络连接正常&#xff0c;可以访问互联网。尝试使用其他网站或工具测试网络连接是否正…

基于SpringBoot vue3 的山西文旅网java网页设计与实现

博主介绍&#xff1a;专注于Java&#xff08;springboot ssm springcloud等开发框架&#xff09; vue .net php phython node.js uniapp小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设&#xff0c;从业十五余年开发设计教学工作☆☆☆ 精彩专栏推荐订阅☆☆☆☆…

React生命周期以及Hook

React生命周期可概括为以下关键阶段&#xff08;针对类组件&#xff0c;函数组件主要通过Hooks实现类似功能&#xff09;&#xff1a; 挂载&#xff08;Mounting&#xff09;&#xff1a; constructor&#xff1a;初始化state和绑定事件处理函数。 render&#xff1a;返回组件的…

Element-UI Plus 暗黑主题切换及自定义主题色

1. 暗黑主题切换 在main.js中引入下面文件 import element-plus/theme-chalk/dark/css-vars.css安装 vueuse/core pnpm add vueuse/coreApp.vue 添加下面代码 使用了 useDark() 的页面才会从 localStorage中读取当前主题状态&#xff0c;否则&#xff0c;刷新页面就会恢复默…

LeetCode讲解篇之1043. 分隔数组以得到最大和

文章目录 题目描述题解思路题解代码题目链接 题目描述 题解思路 对于这题我们这么考虑&#xff0c;我们选择以数字的第i个元素做为分隔子数组的右边界&#xff0c;我们需要计算当前分隔子数组的长度为多少时能让数组[0, i]进行分隔数组的和最大 我们用数组f表示[0, i)区间内的…

docker 部署 Seatunnel 和 Seatunnel Web

docker 部署 Seatunnel 和 Seatunnel Web 说明&#xff1a; 部署方式前置条件&#xff0c;已经在宿主机上运行成功运行文件采用挂载宿主机目录的方式部署SeaTunnel Engine 采用的是混合模式集群 编写Dockerfile并打包镜像 Seatunnel FROM openjdk:8 WORKDIR /opt/seatunne…

自动驾驶-问题笔记-待解决

参考线的平滑方法 参考线平滑算法主要有三种&#xff1a; 离散点平滑&#xff1b;螺旋曲线平滑&#xff1b;多项式平滑&#xff1b; 参考链接&#xff1a;参考线平滑 对于平滑方法&#xff0c;一直不太理解平滑、拟合以及滤波三者的作用与区别&#xff1b; 规划的起点&#x…

leetcode第189题:轮转数组(C语言版)

思路1&#xff08;不推荐&#xff09; 保存数组最后一个元素&#xff0c;然后数组全体元素后移一位&#xff0c;把保存的最后一个元素存放到数组的第一个位置&#xff0c;重复这一操作&#xff0c;直到执行完了k次。 时间复杂度&#xff1a;需要用k次循环&#xff0c;里面套一层…

MySQL的驱动安装

1、下载并安装MySQL 下载地址&#xff1a; 建议在下列框中选择LTS长期支持版本&#xff0c;下载对应的MSI安装文件。 安装完成后&#xff0c;将MySQL的环境bin路径添加到环境变量中。 可以运行MySQL Configurator进行配置&#xff0c;主要设置密码&#xff0c;并初始化。其余…

Ruby 数组(Array)

Ruby 数组&#xff08;Array&#xff09; 引言 Ruby&#xff0c;作为一种高级编程语言&#xff0c;以其简洁明了的语法和强大的功能而闻名。在Ruby中&#xff0c;数组&#xff08;Array&#xff09;是一种基本的数据结构&#xff0c;用于存储一系列有序的元素。本文将深入探讨…

【五分钟学会】YOLO11 自定义数据集从训练到部署

数据集地址 数据集包含 360 张红血细胞图像及其注释文件&#xff0c;分为训练集与验证集。训练文件夹包含 300 张带有注释的图像。测试和验证文件夹都包含 60 张带有注释的图像。我们对原始数据集进行了一些修改以准备此 CBC 数据集&#xff0c;并将数据集分成三部分。在360张…

<<迷雾>> 第8章 学生时代的走马灯(3)--走马灯 示例电路

几个首尾相连的触发器使用同一个控制端&#xff0c;能同时触发 info::操作说明 鼠标单击开关切换开合状态 注: 其中 CP 为按钮开关, 每点击一次, Q 的输出前进一级 注: 第一个触发器的输出端 Q 需要先置入高电平. 如果重置了电路, 可外接电源先使第一个 Q 置入高电平. 另: 因为…

【Windows】在任务管理器中隐藏进程

在此前的一篇&#xff0c;我们已经介绍过了注入Dll 阻止任务管理器结束进程 -- Win 10/11。本篇利用 hook NtQuerySystemInformation 并进行断链的方法实现进程隐身&#xff0c;实测支持 taskmgr.exe 的任意多进程隐身。 任务管理器 代码&#xff1a; // dllmain.cpp : 定义 …

【中间件学习】Git的命令和企业级开发

一、Git命令 1.1 创建Git本地仓库 仓库是进行版本控制的一个文件目录。我们要想对文件进行版本控制&#xff0c;就必须创建出一个仓库出来。创建一个Git本地仓库对应的命令是 git init &#xff0c;注意命令要在文件目录下执行。 hrxlavm-1lzqn7w2w6:~/gitcode$ pwd /home/hr…

No.10 笔记 | PHP学习指南:PHP数组掌握

本指南为PHP开发者提供了一个全面而简洁的数组学习路径。从数组的基本概念到高级操作技巧&#xff0c;我们深入浅出地解析了PHP数组的方方面面。无论您是初学者还是寻求提升的中级开发者&#xff0c;这份指南都能帮助您更好地理解和运用PHP数组&#xff0c;提高编码效率和代码质…

python之运算符

1、算术运算符 算术运算符常用的有&#xff1a;&#xff0c;-&#xff0c;*&#xff0c; &#xff0c;/&#xff0c;//&#xff0c;%&#xff0c;>>,<< 1.1、加 常见的是算术相加&#xff0c;还有一种是字符串拼接。 a 10 b 20 print(a b) c "My &quo…

Python中的观察者模式:从基础到实战

引言 在软件开发中&#xff0c;设计模式是解决特定问题的通用解决方案。观察者模式&#xff08;Observer Pattern&#xff09;是其中一种非常有用的模式&#xff0c;它定义了对象之间的一对多依赖关系&#xff0c;当一个对象状态发生变化时&#xff0c;所有依赖于它的对象都会…

基于facefusion的换脸

FaceFusion是一个引人注目的开源项目&#xff0c;它专注于利用深度学习技术实现视频或图片中的面部替换。作为下一代换脸器和增强器&#xff0c;FaceFusion在人脸识别和合成技术方面取得了革命性的突破&#xff0c;为用户提供了前所未有的视觉体验。 安装 安装基础软件 安装…

注册安全分析报告:科研诚信查询平台无验证方式导致安全隐患

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 1. 暴力破解密码&#xff0c;造成用户信息泄露 2. 短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉 3. 带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造…