cmake扩展(1)——VS+CMake创建Qt项目

news2024/7/6 6:04:46

创建项目

创建CMakeLists

#cmake最低版本
cmake_minimum_required(VERSION 3.10)
#项目名
project(regextool)

#查找所有*.h,*.ui,*.cpp文件,并存入SOURCES中
file(GLOB SOURCES "*.cpp" "*.ui" "*.h")

#开启moc
set(CMAKE_AUTOMOC ON) 
#开启ui功能
set(CMAKE_AUTOUIC ON) 
#查找Qt相关包
find_package(Qt5 COMPONENTS Core Widgets Gui REQUIRED)
#生成可执行文件
add_executable(${PROJECT_NAME} WIN32 ${SOURCES})
#链接头文件
target_include_directories(${PROJECT_NAME}
    PRIVATE
    "*.h")
#链接Qt相关库
target_link_libraries(${PROJECT_NAME} Qt5::Core Qt5::Widgets Qt5::Gui)

生成项目文件

添加main.cpp文件(可以为空)后

CMakeLists目录下运行

cmake -S . -B build

打开项目

build目录下运行

cmake --open .

添加文件

类文件

项目右键->添加->新建项->C++类。设置好类名和路径,点击添加。

ui文件

项目右键->添加->新建项->Qt->Qt Widget Form File。设置好类名和路径,点击添加。

关联ui文件和类文件

由于此处添加的ui文件和类文件没有关联,会导致编译不通过(不知道是不是自己操作有误)。所以需要在类文件中添加内容。

*.h

//类外添加命名空间
QT_BEGIN_NAMESPACE
namespace Ui { class Form; }
QT_END_NAMESPACE

//类内添加成员
private:
	Ui::Form *ui;

*.cpp

//包含头文件,ui_类名.h
#include "ui_Form.h"

//构造中初始化ui变量
RegexTool::RegexTool(QWidget * parent)
	:ui(new Ui::Form)
{
	ui->setupUi(this);
}

此时一个待ui的类就添加好了,可以在项目中使用了。

一些问题

ui文件名

上面提到的ui文件类名为Form,这是创建Qt Widgets Form File文件默认的类名,暂时没有发现预设的操作。

不过我们可以通过创建后修改ui文件进行修改:

<ui version="4.0">
 <author></author>
 <comment></comment>
 <exportmacro></exportmacro>
 <class>Form</class>
 <widget class="QWidget" name="Form">
  <property name="objectName">
   <string notr="true">Form</string>
  </property>
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>400</width>
    <height>300</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>Form</string>
  </property>
 </widget>
 <pixmapfunction></pixmapfunction>
 <connections/>
</ui>

可以将上面的ui文件内容中第5行class属性改成需要的名称即可。

需要注意的是:<关联ui文件和类文件>操作中的命名空间和类名也都需要同步调整。也就是用新类名替换原有的Form。

出现控制台窗口

在一开始时,CMakeLists文件中add_executable没有添加WIN32配置,会导致每次运行时,除了ui窗口,还会弹出控制台窗口。

快速方法

为了解决这个问题,可以在右键->属性->链接器->系统->子系统,选择窗口;

然后再在高级->入口点输入:mainCRTStartup

这样就可以解决这个问题。

不过,每当重新生成项目文件后,都会被重置。

根本解决方法

在CMakeLists中add_executable中添加WIN32配置,这将会从默认的控制台程序改成ui程序。确保永久不会出现控制台窗口

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

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

相关文章

SCAU操作系统知识点之(九)单处理器调度

1、处理器调度的类型–长程&#xff0c;中程&#xff0c;短程 例&#xff1a;作业调度程序从处于_____A______状态的队列中选取适当的作业投入运行。 A. 后备 B. 提交 C. 运行 D. 完成 例&#xff1a;**“选一个进程占用 CPU”**是____A_____的功能。 A. 短程调度 B. 中程调度 …

重要日期提醒软件有哪些?有没有适合提醒自己的软件

在时间如潮水般流逝的时代&#xff0c;我们总是在忙碌中度过日子。然而&#xff0c;纵使再忙碌&#xff0c;我们也不能忘记那些温馨而重要的日期&#xff0c;因为这些日期是我们生活中最珍贵的记忆。 无论是生日、纪念日还是重要节日&#xff0c;这些日期都是我们生活的点滴&a…

快速上手ProtoBuf

目录&#xff1a; 需求&#xff1a;引⼊ProtoBuf包创建.proto⽂件编译contacts.proto⽂件&#xff0c;⽣成JAVA⽂件编译contacts.proto⽂件后会⽣成什么序列化与反序列化的使⽤⼩结ProtoBuf使⽤流程 1.需求&#xff1a; 在快速上手中&#xff0c;会编写第一版本的通讯录1.0。…

【JZ36 二叉搜索树与双向链表】

目录 1.题目描述2.算法思想3.代码实现 1.题目描述 2.算法思想 注意点&#xff1a;为什么要引用传参&#xff1f;原因如下&#xff1a; 3.代码实现 class Solution { public:void inorder(TreeNode* cur,TreeNode*& prev){if(curnullptr){return ;}inorder(cur->left,…

pve组网实现公网访问pve,访问电脑,访问pve中的openwrt同时经过openwrt穿透主路由地址nginx全公网访问最佳办法测试研究...

一台路由器 做主路由 工控机 装pve虚拟机 虚拟机里面装一个openwrt, 外网可以直接访问pve,可以访问pve里的openwrt 一台主机 可选择连 有4个口&#xff0c;分别eth0,eth1,eth2,eth3 pve有管理口 这个情况下 &#xff0c;没有openwrt 直接电脑和pve管理口连在一起就能进pve管理界…

vue3 + vite + ts 封装 SvgIcon组件

环境 vite vue3 ts "vue": "^3.3.4", "vite": "^4.4.0", "typescript": "^5.0.2",# 需要下载的依赖 "vite-plugin-svg-icons": "^2.0.1",不同版本可能存在一定差异, 这篇文章不可能对应所…

数学建模(一)前继概念

课程推荐&#xff1a;数学建模老哥_哔哩哔哩_bilibili 目录 一、什么是数学建模&#xff1f; 二、数学建模的一般步骤 三、数学建模赛题类型 1.预测型 2. 评价类 3.机理分析类 4. 优化类 一、什么是数学建模&#xff1f; 数学建模是利用数学方法解决实际问题的一种实践。…

关于ISO27701隐私信息安全管理体系介绍

01 什么是ISO27701 ISO27701是对ISO27001信息安全管理和ISO27002安全控制的隐私扩展&#xff0c;全称《安全技术—扩展ISO27001和ISO27002的隐私信息管理—要求与指南》&#xff0c;是ISO标准委员会以ISO 27001为基准&#xff0c;以ISO27552为蓝本&#xff0c;建立发布的隐私…

Flink多流处理之Broadcast(广播变量)

写过Spark批处理的应该都知道,有一个广播变量broadcast这样的一个算子,可以优化我们计算的过程,有效的提高效率;同样在Flink中也有broadcast,简单来说和Spark中的类似,但是有所区别,首先Spark中的broadcast是静态的数据,而Flink中的broadcast是动态的,也就是源源不断的数据流.在…

docker-compose redis 一直启动失败

环境&#xff1a; centos 8.x 背景 使用docker-compose 来启动redis docker-compose.yml 如下&#xff1a; version: 3.3 services:redis:image: redis:latestrestart: alwayscontainer_name: redisports:- 6379:6379volumes:- ./data:/redis/data- ./redis.conf:/redis/re…

JMeter 查看 TPS 数据,详细指南

TPS 是软件测试结果的测量单位。一个事务是指一个客户机向服务器发送请求然后服务器做出反应的过程。客户机在发送请求时开始计时&#xff0c;收到服务器响应后结束计时&#xff0c;以此来计算使用的时间和完成的事务个数。在 JMeter 中&#xff0c;我们可以使用以下方法查看 T…

AI一键生成数字人

AI一键生成数字人,不玩虚的 阅读时长&#xff1a;10分钟 本文内容&#xff1a; 结合开源AI&#xff0c;一键生成短视频发布到常见的某音&#xff0c;某手平台&#xff0c;狠狠赚一笔 前置知识&#xff1a; 基本的 python 编程知识Jupyter Notebook 使用过Linux 使用过 先上源码…

Linux Idea启动项目打印堆栈日志(JMX监控日志)

说明 Idea更新至新版本&#xff08;2023.1&#xff09;后&#xff0c; 在Linux环境下默认会开启JMX监控并输出日志。 关闭JMX监控 打开Configurations配置面板。打开Modify options(ALt M)选项面板。勾选Disable JMX endpoints。 修改Configurations模板 确定不需要打印…

【算法题】螺旋矩阵I (求解n阶螺旋矩阵问题)

一、问题的提出 螺旋矩阵是一种常见的矩阵形式&#xff0c;它的特点是按照螺旋的方式排列元素。n阶螺旋矩阵是指矩阵的大小为nn&#xff0c;其中n为正整数。 二、解决的思路 当N1时&#xff0c;矩阵为; 当N2时&#xff0c;矩阵为; 当N>2(N为偶数如N4)时&#xff0c;矩阵…

通达OA SQL注入漏洞【CVE-2023-4166】

通达OA SQL注入漏洞【CVE-2023-4166】 一、产品简介二、漏洞概述三、影响范围四、复现环境POC小龙POC检测工具: 五、修复建议 免责声明&#xff1a;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损…

简单网络-跨网段通信

跨网段通信 1.为PC1&#xff0c;PC2配置IP地址、子网掩码和网关后用PC1 ping PC2&#xff0c;并用wireshark抓包g0/0/2的数据包。结果发现不能ping通&#xff0c;而PC1在发送广播包&#xff0c;寻找10.0.1.254网关&#xff0c;说明PC1找不到网关 2.给路由器e0/0/0端口配置网关1…

git一次错误merge的回滚

场景&#xff1a;提交到sit的代码&#xff0c;结果解决冲突merge了DEV的代码&#xff0c;所以要回滚到合并之前的代码 &#xff08;原因是我再网页上处理了冲突&#xff0c;他就自动merge了,如图—所以还是idea处理冲突&#xff0c;可控&#xff09; 方式二&#xff1a; &…

【Java多线程】CompletableFuture 异步多线程

1. 回顾 Future 一些业务场景我们需要使用多线程异步执行任务&#xff0c;加快任务执行速度。 JDK5新增了Future接口&#xff0c;用于描述一个异步计算的结果。 虽然 Future 以及相关使用方法提供了异步执行任务的能力&#xff0c;但是对于结果的获取却是很不方便&#xff0…

docker安装Nacos的《小白专用》详细教程

1.CentOS安装docker 安装docker yum -y install docker 设置开机自启 systemctl enable docker 启动docker systemctl start docker 查看docker当前的版本 docker version做到这里呢基本上你的docker就安装了一大部分了&#xff0c;当然也有那些无法安装的人&#xff0c;那我建…

prometheus监控k8s服务并告警到钉钉

一、监控k8s集群 要监控k8s集群需要使用到以下服务用于收集监控的资源信息&#xff0c;node_exporter用于监控k8s集群节点的资源信息&#xff0c;kube-state-metrics用于监控k8s集群的deployment、statefulset、daemonset、pod等的状态&#xff0c;cadvisor用于监控k8s集群的p…