Visual Studio 2015 + cmake编译QT5程序

2023-10-26

概述

  • 由于QT的集成开发环境QTCreate,在代码调试功能上远不及Visual Studio方便,因此,在Windows平台,可以使用Visual Studio来开发调试QT程序,本文章就主要介绍下,如何使用CMAKE编译QT5程序,并使用Visual Studio 2015来运行调试QT程序。

准备工作

  • 首先安装QT5, 我使用的是QT5.9。然后安装Visual Studio 2015和cmake,cmake要配置环境变量。
    在这里插入图片描述
    在这里插入图片描述
  • QT编译器介绍
    • MSVC:Microsoft Visual C++ Compiler,即微软自己的编译器。
    • MinGW:Minimalist GNU for Windows,它是将GNU开发工具移植到Win32平台下的产物,即一套Windows上的GNU工具集。

使用QT create创建工程

  • 首先我们要用Qt create创建一个工程,完成界面布局。
    在这里插入图片描述
  • 选择编译器的时候要注意,因为我们要使用Visual Studio进行编译调试。因此这里编译器必须选择MSVC,我这里就选择MSVC2015 32位的编译器。
  • 在UI界面完成简单布局,就可以关掉Qt Create了。
    在这里插入图片描述

设置QT环境变量

  • 接下来需要设置下QT的环境变量。找到QT的安装目录,然后找到编译器所在目录。
    在这里插入图片描述
  • 可以看到有好几个编译器,我们刚才创建工程时选择的是MSVC2015,这里就选择MSVC2015对应的目录。
  • 然后要一直选到Qt5Config.cmake文件所在的目录
    在这里插入图片描述
  • 复制目录设置环境变量
    在这里插入图片描述
    在这里插入图片描述
  • 这里注意,变量名一定要写成Qt5_DIR,如果使用的是QT4,变量名要写成QTDIR。路径最好不要包含中文。
  • 设置完重启下电脑。

创建cmake文件

  • 创建一个编译目录build_x86,和一个cmake文件
  • 直接看下目录结构
  •   ├── build_x86
      ├── CMakeLists.txt
      └── demo1
      	├── demo1.pro
      	├── main.cpp
      	├── widget.cpp
      	├── widget.h
      	└── widget.ui
    
  • CMakeLists.txt内容
  •   cmake_minimum_required(VERSION 3.10.0)
    
      project(QtDemo)
    
      #开启MOC、RCC和UIC,则会在预处理之前先进行MOC、RCC和UIC操作
      set(CMAKE_AUTOMOC ON)
      set(CMAKE_AUTORCC ON)
      set(CMAKE_AUTOUIC ON) 
    
      #查找需要的Qt包
      find_package(Qt5 REQUIRED Core Gui Widgets)
      # 将各个文件夹下的所有文件打包
      SET(SRC_LISTS ${PROJECT_SOURCE_DIR}/demo1/main.cpp ${PROJECT_SOURCE_DIR}/demo1/widget.cpp)
    
      # 包含头文件所在目录
      include_directories(${PROJECT_SOURCE_DIR}/demo1)
      
      # 去除命令框
      if(MSVC)
      	set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup")
      endif()
      
      # 生成可执行程序
      add_executable(QtDemo ${SRC_LISTS})       
    
      # 链接QT库
      target_link_libraries(QtDemo Qt5::Core Qt5::Gui Qt5::Widgets)
    

编译运行

  • 在build_x86目录下打开cmd,执行以下命令
  •   cmake -G "Visual Studio 14 2015" ..
      cmake --build ./ --config Debug
    
  • 如果成功,会在build_x86\Debug目录下生成可执行程序。
    在这里插入图片描述
  • 现在还无法运行,我们需要将QT安装目录下的库拷贝过来。
    在这里插入图片描述
  • 可以使用Everything全局搜索下
    在这里插入图片描述
  • 我们选择的是MSVC2015编译器,因此要拷贝对应编译器下的动态库
    在这里插入图片描述
  • 这时候直接双击可执行程序,就可以运行了
    在这里插入图片描述

使用VS2015进行调试

  • 如果需要调试,直接双击build_x86目录下的sln文件,就可以用VS2015打开了。
    在这里插入图片描述
  • 现在就可以直接在VS中调试QT程序了
    在这里插入图片描述
  • VS2015中无法打开QT的UI界面,因此如果还需要在UI界面继续添加控件,只需要双击工程下的pro文件,用Qt create打开重新设置界面就行了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Visual Studio 2015 + cmake编译QT5程序 的相关文章

  • 如何在按下托盘图标菜单操作时执行功能?

    int main int argc char argv QApplication oApp argc argv QAction action1 QMenu menu QSystemTrayIcon TrayIcon QIcon favico
  • 如何用if条件编写ini文件

    我想编写一个带有 if else 条件的 ini 文件 我用 python 中的 ConfigParser 解析它 如何在ini文件中使用if和else语句 如果我明白你在问什么 您可能想要做的是这样的 在 INI 文件中设置条件值 sec
  • 可以禁用“应用程序错误”对话框吗?

    我使用 Hudson 作为持续集成服务器来测试 C C 代码 不幸的是 我在某个地方有一个错误导致内存损坏 因此在某些 Windows 计算机上我有时会收到一个 应用程序错误 对话框 解释一条指令引用了无法读取的内存 弹出此对话框并基本上挂
  • WinError6 句柄无效 Python 3+ 多处理

    我正在运行一个 Python 3 7 Flask 应用程序 它使用flask socketio设置一个socketio用于浏览器客户端的服务器 另一个连接到单独远程的Python进程socketio服务器和交换消息 以及另一个从 PIR 传
  • 从 EC2 W2008 实例创建 AMI - 为什么从来没有获得密码?

    我正在尝试做什么 我正在尝试克隆 EC2视窗2008通过管理控制台实例 该实例基于 Windows Server2008 i386 Base v104 ami 92ba43fb 但上面安装了许多应用程序 我想为新实例保留这些应用程序 发生了
  • 如何创建共享网络目录或文件的超链接?

    我检查了以下两个相关讨论 1 如何创建指向本地可执行文件的超链接 https stackoverflow com questions 2815982 how do i make a hyperlink to a local executab
  • win32 API 和 .NET 框架之间的选择

    我必须开发一个适用于 Windows 的应用程序 该应用程序将能够通过网络摄像头识别手势来控制鼠标 我将使用 vc 2008 进行开发 但我很困惑是使用 NET 框架还是核心 win32 API 性能对于我的应用程序非常重要 根据 Ivor
  • Windows:列出并启动与扩展关联的应用程序

    如何确定与特定扩展名 例如 JPG 关联的应用程序 然后确定该应用程序的可执行文件所在的位置 以便可以通过调用 System Diagnostics Process Start 来启动它 我已经知道如何读取和写入注册表 注册表的布局使得以标
  • 调试断言失败。表达式(流!=NULL)

    我收到以下错误 调试断言失败 表达式 流 NULL 文件 f dd vctools crty bld self x86 crt src fwrite c 创建 4 个线程时 CPU 使用率 100 该代码最初运行良好一段时间 然后给出此错误
  • 如何正确使用和实例化现有预览处理程序

    我正在尝试使用现有的预览处理程序来显示文件的预览 我编写了一个简单的测试程序 以 1 查找给定文件的预览处理程序的 CLSID 2 实例化预览处理程序 3 通过流或文件初始化它 4 在基本窗口上渲染预览 这有效 或多或少 It works
  • 将 Metro 应用程序固定到任务栏 Windows 10 Powershell

    以下代码将固定 Metro 应用程序以在给定 AUMID 的情况下启动 如果你改变 match Pin To Start 不幸的是 将匹配更改为 固定到任务栏 不起作用 这里发生了什么 function Pin Taskbar param
  • 使用 CreateRestrictedToken(LUA_TOKEN) 从提升的进程创建低/中进程

    我正在尝试从提升的进程创建中或低完整性进程 我知道还有其他类似的问题 但它们主要关注使用资源管理器或任务计划程序等解决方法 我想坚持使用CreateRestrictedToken CreateProcessAsUser 我认为一定可以以某种
  • 如何在带有预编译头的项目中使用google protobuf

    我有一个包含多个项目的解决方案 我的项目 但不是全部 使用预编译头 我决定使用 protobuf 但遇到了一个问题 在 protoc exe 从 proto 生成 pb h 后 我尝试包含标头并收到错误 预编译标头未包含在 pb h 中 我
  • 如何使用 Qtimer 添加 1 秒延迟

    我目前有一个方法如下 void SomeMethod int a Delay for one sec timer gt start 1000 After one sec SomeOtherFunction a 这个方法实际上是一个附加到信号
  • 如何检测Windows版本是否合法? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我对获取版本信息不感兴趣 我想做的就是确保我的应用程序只能在合法版本的 Windows 上运行 而不是在盗版版本上运行 Windows 使
  • 每个进程每个线程的时间量

    我有一个关于 Windows 和 Linux 中进程和线程的时间量子的问题 我知道操作系统通常为每个线程提供固定的时间量 我知道时间量根据前台或后台线程而变化 也可能根据进程的优先级而变化 每个进程有固定的时间量吗 例如 如果操作系统为每个
  • 向 Qt 样式表添加特异性时丢失样式

    这是我的代码 const QString STYLE SHEET background color rgba x x x y border 1px solid gray border radius 0px border top 1px so
  • Qt 文件对话框默认后缀不起作用

    我将以下代码用于 QtQuick Dialogs 1 3 和 Qt 5 10 0 下 filedialog 的新属性 我使用 Qt Creator 5 10 默认套件构建它 import QtQuick 2 10 import QtQuic
  • 如何在 Qt 中以编程方式制作一条水平线

    我想弄清楚如何在 Qt 中制作一条水平线 这很容易在设计器中创建 但我想以编程方式创建一个 我已经做了一些谷歌搜索并查看了 ui 文件中的 xml 但无法弄清楚任何内容 ui 文件中的 xml 如下所示
  • OSError: [WinError 193] %1 不是有效的 Win32 应用程序,同时使用 CTypes 在 python 中读取自定义 DLL

    我正在尝试编写用 python 封装 C 库的代码 我计划使用 CTypes 来完成此操作 并使用 Visual Studio 来编译我的 DLL 我从一个简单的函数开始 在 Visual Studio 内的标头中添加了以下内容 然后将其构

随机推荐

  • 我的服务器开发之路-安装mysql之mariadb并更改数据库路径

    centos最好安装mariadb 输入rpm qa grep mariadb 并没有显示版本号 则说明并没有安装mariadb 输入yum remove mysql mysql server mysql libs可完全卸载mysql相关
  • K8S个人学习之路

    服务器预备环境 1 永久禁用swap空间 1 临时关闭swap分区 重启失效 swapoff a 2 永久关闭swap分区 sed ri s swap etc fstab 2 修改k8s gcr io 路径的镜像 其他的镜像仓库 MY RE
  • Spark-RDD编程

    Spark在进行计算的时候通常会包含以下几个步骤 创建SparkContext上下文对象 使用SparkContext加载数据创建RDD RDD的转换算子transfotmations RDD的行动算子actions RDD的缓存和持久化
  • 反射获取字段的值与非空校验

    获取指定字段的值 通过字段对应的get方法 public Object getFieldValueByName1 String fieldName Object obj try String firstLetter fieldName su
  • 《Semi-Supervised Semantic Segmentation with Cross-Consistency Training》 2020CVPR 论文阅读

    在这项工作中 作者首先观察到 对于语义分割 低密度区域在隐藏表示中比在输入中更明显 作者提出了交叉一致性训练 其中预测的不变性是施加不同的扰动在编码器输出上 Cross Consistency Training 该模型包含一个共享的enco
  • SQL千万级大数据量查询优化

    转发自 https blog csdn net long690276759 article details 79571421 spm 1001 2014 3001 5506 防止查询资料找不到来源 很详细 1 对查询进行优化 应尽量避免全表
  • c++中istringstream及ostringstream超详细说明

    文章目录 1 stringbuf类介绍 1 1 stringbuf类构造函数 1 2 str函数 2 istringstream类 2 1 rdbuf函数 2 2 swap函数 3 ostringstream类和stringstream类
  • whisper

    Robust Speech Recognition via Large Scale Weak Supervision 介绍 大规模弱监督的训练 先前的方法都是通过大量的无监督学习训练 无监督的数据容易收集 所以通过大量无监督的学习可以训练出
  • Node中的事件循环

    Node中的事件循环 Node的底层语言是libuv 使用v8引擎解析js脚本 libuv负责调用接口API 将不同的任务交给不同的线程处理 再将处理结果交给v8引擎 v8引擎再将处理结果发送给用户 Node中任务的执行顺序 timers定
  • Mybatis-Plus:Service接口

    目录 IService接口 1 写实体类 2 写mapper接口 3 写service接口 4 写service接口的实现类 IService自带方法 1 save 2 SaveOrUpdate 3 Remove 4 Update 5 Ge
  • xss-domcobble绕过XSSfilter

    目录 DOM破坏的原理 例题 多层标签 HTMLCollection 一些常见的标签的关系 三层标签如何获取 例题 DOM破坏的原理 DOMClobber是一种攻击技术 它利用了DOM 文档对象模型 的特性来破坏或修改网页的结构和功能 DO
  • WDK李宏毅学习笔记第十五周01_Conditional Generation by Conditional

    Conditional Generation by GAN 文章目录 Conditional Generation by GAN 摘要 1 Supervised Conditional GAN 1 1 目的 1 2 做法 1 3 Discr
  • 把一个base64编码的图片绘制到canvas (canvas的图片在转成dataurl)

    把一个base64编码的图片绘制到canvas 需要引入jquery
  • SpringBoot中ThreadPoolTaskExecutor的使用

    文章目录 1 配置自己的线程池 2 使用 2 1 在Service层使用 2 2 多线程中使用事务的写法 2 3 方法内多线程 2 3 1 错误写法 2 3 2 正确写法 一 2 3 2 正确写法 二 2 3 3 正确写法 三 3 线程池与
  • mysql的相关技术说明_MySQL 系统架构 说明

    说明 本文转自 简朝阳 MySQL ACE 的 MySQL性能调优与架构设计 一 逻辑模块组成 总的来说 MySQL 可以看成是二层架构 第一层我们通常叫做SQL Layer 在MySQL 数据库系统处理底层数据之前的所有工作都是在这一层完
  • 计算机熔断与服务降级,Hystrix---服务熔断和服务降级

    一 服务熔断 防止服务雪崩 作用在服务提供者 服务熔断 熔断机制是应对雪崩效应的一种微服务链路保护机制 当扇出链路的某个微服务不可用或者响应时间太长时 会进行服务的降级 进而熔断该节点微服务的调用 快速返回 错误 的响应信息 当检测到该节点
  • Java多线程——Lock

    Lock 从JDK 5 0开始 Java提供了更强大的线程同步机制 通过显式定义同步锁对象来实现同步 同步锁使用Lock对象充当 java util concurrent locks Lock接口是控制多个线程对共享资源进行访问的工具 锁提
  • Java的静态绑定与动态绑定

    我们可以对思考一个问题 JVM是如何知道调用的是哪个类的方法源代码 这里面到底有什么内幕呢 这篇文章我们就将揭露JVM方法调用的静态 static binding 和动态绑定机制 auto binding 理解这两个绑定之前 我们不妨先理解
  • Vue + Springboot 前后端分离项目实践:项目简介及教程

    专栏目录 持续更新 Vue js Spring Boot 前后端分离项目实践 一 项目简介Vue js Spring Boot 前后端分离项目实践 二 搭建 Vue js 项目Vue js Spring Boot 前后端分离项目实践 三 前
  • Visual Studio 2015 + cmake编译QT5程序

    概述 由于QT的集成开发环境QTCreate 在代码调试功能上远不及Visual Studio方便 因此 在Windows平台 可以使用Visual Studio来开发调试QT程序 本文章就主要介绍下 如何使用CMAKE编译QT5程序 并使