使用C++和QT开发应用程序入门以及开发实例分享

目录

1、搭建开发环境(VS2010和QT4.8.2)

2、创建一个QT窗口

3、在QT窗口中添加子窗口

4、QT界面布局

5、QT信号(SIGNAL)和槽(SLOT)

6、最后


C++软件异常排查从入门到精通系列教程(专栏文章列表,欢迎订阅,持续更新...)icon-default.png?t=O83Ahttps://blog.csdn.net/chenlycly/article/details/125529931C/C++实战专栏(专栏文章已更新460多篇,持续更新中...)icon-default.png?t=O83Ahttps://blog.csdn.net/chenlycly/article/details/140824370C++ 软件开发从入门到精通(专栏文章,持续更新中...)icon-default.png?t=O83Ahttps://blog.csdn.net/chenlycly/category_12695902.htmlVC++常用功能开发汇总(专栏文章列表,欢迎订阅,持续更新...)icon-default.png?t=O83Ahttps://blog.csdn.net/chenlycly/article/details/124272585C++软件分析工具从入门到精通案例集锦(专栏文章,持续更新中...)icon-default.png?t=O83Ahttps://blog.csdn.net/chenlycly/article/details/131405795开源组件及数据库技术(专栏文章,持续更新中...)icon-default.png?t=O83Ahttps://blog.csdn.net/chenlycly/category_12458859.html网络编程与网络问题分享(专栏文章,持续更新中...)icon-default.png?t=O83Ahttps://blog.csdn.net/chenlycly/category_2276111.html       QT是跨平台的界面库,它集成了很多优秀的界面设计思想,它作为程序UI界面编程的框架,是个很好的选择。今天就来讲讲使用C++和QT开发应用程序入门方面的内容,并分享一个简单的开发实例,以供借鉴或参考。

1、搭建开发环境(VS2010和QT4.8.2)

      先下载qt-win-opensource-4.8.2-vs2010.exe并安装(本文安装在C盘根目录):

        打开vs2010,选择 控制台工程(win32 console Application) 选中空的工程(empty project):

       在工程中添加源文件: 

       将QT头文件包含路径(C:\Qt\4.8.2\include;C:\Qt\4.8.2\include\QtCore;C:\Qt\4.8.2\include\QtGui),lib库文件包含路径(C:\Qt\4.8.2\lib),添加到VS工程中,如下所示:

2、创建一个QT窗口

        每个qt程序都必须有一个Qapplication实例 。当然,我们得链接库文件:

1)Release下:
#pragma comment(lib, “qtcore4.lib”) 
#pragma comment(lib, “qtgui4.lib”)
2)Debug下:
#pragma comment(lib, “qtcored4.lib”)
#pragma comment(lib, “qtguid4.lib”)

这时我们编译过,但是运行会提示缺少qtgui4.dll,很简单,qt的安装目录下,bin文件夹下有我们需要的所有dll:

1)可以单独拷贝需要的dll到exe运行目录(主要采用该方式)
2)可以单独拷贝需要的dll到system32目录(不建议实用该方式,可能会影响到到其他程序)
3)当然我们可以添加环境变量PATH = C:\Qt\4.8.2\bin,然后工程executable directories添加C:\Qt\4.8.2\bin

此时,我需要qtcore.dll和qtgui.dll。

       运行程序,虽然任何东西都没有出现,但我们的第一个qt程序已经构建成功,QApplication实例构建成功,它就是我们的应用程序实例,我们可以通过继承Qapplication构建自己的APP实例。

       接下来是构建QT窗口了,QMainWindow从Qwidget(相当于MFC的CWnd)继承,要显示它,只需调用show()接口即可,如下:

因为我们是控制台工程,运行时会有dos窗口弹出,debug下可以方便的打印,比如cout和printf输出等,

如果release下不希望弹出dos窗口,可以修改链接器链接属性,把子系统从Console设置成Windows:

同时链接入口点函数设置成mainCRTStartup:


       在这里,给大家重点推荐一下我的几个热门畅销专栏,欢迎订阅:(博客主页还有其他专栏,可以去查看)

专栏1:该精品技术专栏的订阅量已达到550多个,专栏中包含大量项目实战分析案例,有很强的实战参考价值,广受好评!专栏文章持续更新中,预计更新到200篇以上!欢迎订阅!)

C++软件调试与异常排查从入门到精通系列文章汇总icon-default.png?t=O83Ahttps://blog.csdn.net/chenlycly/article/details/125529931

本专栏根据多年C++软件异常排查的项目实践,系统地总结了引发C++软件异常的常见原因以及排查C++软件异常的常用思路与方法,详细讲述了C++软件的调试方法与手段,以图文并茂的方式给出具体的项目问题实战分析实例(很有实战参考价值),带领大家逐步掌握C++软件调试与异常排查的相关技术,适合基础进阶和想做技术提升的相关C++开发人员!

考察一个开发人员的水平,一是看其编码及设计能力,二是要看其软件调试能力!所以软件调试能力(排查软件异常的能力)很重要,必须重视起来!能解决一般人解决不了的问题,既能提升个人能力及价值,也能体现对团队及公司的贡献!

专栏中的文章都是通过项目实战总结出来的,包含大量项目问题实战分析案例,有很强的实战参考价值!专栏文章还在持续更新中,预计文章篇数能更新到200篇以上!

专栏2:(本专栏涵盖了C++多方面的内容,是当前重点打造的专栏,订阅量已达200多个,专栏文章已经更新到460多篇,持续更新中...)

C/C++实战进阶(专栏文章,持续更新中...)icon-default.png?t=O83Ahttps://blog.csdn.net/chenlycly/category_11931267.html

以多年的开发实战为基础,总结并讲解一些的C/C++基础与项目实战进阶内容,以图文并茂的方式对相关知识点进行详细地展开与阐述!专栏涉及了C/C++领域多个方面的内容,包括C++基础及编程要点(模版泛型编程、STL容器及算法函数的使用等)、数据结构与算法、C++11及以上新特性(不仅看开源代码会用到,日常编码中也会用到部分新特性,面试时也会涉及到)、常用C++开源库的介绍与使用、代码分享(调用系统API、使用开源库)、常用编程技术(动态库、多线程、多进程、数据库及网络编程等)、软件UI编程(Win32/duilib/QT/MFC)、C++软件调试技术(排查软件异常的手段与方法、分析C++软件异常的基础知识、常用软件分析工具使用、实战问题分析案例等)、设计模式、网络基础知识与网络问题分析进阶内容等。

专栏3:  

C++常用软件分析工具从入门到精通案例集锦汇总(专栏文章,持续更新中...)icon-default.png?t=O83Ahttps://blog.csdn.net/chenlycly/article/details/131405795

常用的C++软件辅助分析工具有SPY++、PE工具、Dependency Walker、GDIView、Process Explorer、Process Monitor、API Monitor、Clumsy、Windbg、IDA Pro等,本专栏详细介绍如何使用这些工具去巧妙地分析和解决日常工作中遇到的问题,很有实战参考价值!

专栏4:   

VC++常用功能开发汇总(专栏文章,持续更新中...)icon-default.png?t=O83Ahttps://blog.csdn.net/chenlycly/article/details/124272585

将10多年C++开发实践中常用的功能,以高质量的代码展现出来。这些常用的高质量规范代码,可以直接拿到项目中使用,能有效地解决软件开发过程中遇到的问题。

专栏5: 

C++ 软件开发从入门到精通(专栏文章,持续更新中...)icon-default.png?t=O83Ahttps://blog.csdn.net/chenlycly/category_12695902.html

根据多年C++软件开发实践,详细地总结了C/C++软件开发相关技术实现细节,分享了大量的实战案例,很有实战参考价值。


3、在QT窗口中添加子窗口

        QT的所有控件类都是从QWidget继承,所以每个控件都有个构造函数,设置父窗口,传入QWidget*,我们首先添加一个QLable(相当于MFC的CStatic)显示“hello world,I am QT。"。把该控件的父窗口设置为CMainWindow(我们从QMainWindow继承,方便我们管理各个子窗口)。

       添加新的类CMainWindow:

为了方便管理QLabel(显示hello world iam QT)子窗口,我们继承QMainWindow,并组合QLabel子窗口,设置其父窗口为this:

这样我们便可以在CMainWindow构造函数中创建子窗口了:

       这时运行程序,QLabel并没有把我们的字显示完全,而且它默认的位置也不是我们想要的,我们想要它显示在窗口正中央。这样引入我们下个话题,qt界面的布局。

注意:我们在构造函数new了一个QLabel对象,但是并没有在析构函数delete掉它,因为qt框架自身有内存回收的机制,因为Qlabel是CMainWindow的子窗口,它析构的时候会自动释放所有子窗口,子布局器,不需要我们自己显示的delete(至于它内部的回收机制,希望以后有机会可以介绍,这里不多做介绍,篇幅已然太长了)

当然我们可以添加更多的其他子控件,比如QLineEdit、QEdit、QPushButton、QTableWidget等等,下边介绍界面布局,当然同时我们会用到其他更多的控件。

4、QT界面布局

       MFC有RC资源编辑器,可以方便的编辑对话框,qt也有qtdesigner可以方便的编辑各种窗口,但是qt更灵活,提供布局管理器,可以方便的为我们的界面布局,不需要运行时计算主窗口大小,然后计算各个子控件位置,常用的界面布局类:QHBoxLayout(水平布局)、QVBoxLayout(垂直布局)、QGridLayout(网格布局) 。

      上一段的Hello world Iam QT并没有显示完整,我希望它显示在CMainWindow正中央,可以用QHBoxLayout,也可以用QVBoxLayout(因为我们要往布局器中加入的只有一个QLabel窗口,当然水平布局,垂直布局都一样)。

       添加两个成员函数,CreateSubCtrls,CreateSubLayout(创建子窗口,创建子布局):

首先创建一个水平布局器,把QLabel加进去,然后设置中心窗口的布局。

注意:我们创建m_pLabelHello并没有指定父窗口,它的父窗口是NULL,但是加入layout中,layout又被pCentralWidget setlayout为自己的子布局器,pCentralWidget又是CMainWindow的子窗口,这样父子窗口的层级就出来了。不需要指定父窗口了。

      我们希望有更复杂的布局:

创建它们:

       因为我们用到的中文,需要设置中文字符编码器,要不会有乱码:

现在创建布局:

显示结果:

        现在我们分析下这个布局:

1)创建网格布局,并加入四个控件,行列规定好:

2)创建水平布局,加入两个按钮:

3)创建垂直布局,加入label,加入网格布局,加入水平布局:

从而得到:


5、QT信号(SIGNAL)和槽(SLOT)

        QT提供信号和槽的机制,将响应的信号和槽关联起来,(connect函数,在Qobject中定义,QObject是所有QT类的基类)

connect函数有四个参数:
第一个参数是信号的发送者,
第二个参数是 发送什么信号
第三个参数是 信号的接受者
第四个参数是 接受者的槽,就是响应函数

       我们连接服务器地址的 LineEdit的textChanged信号(用户编辑内容,便触发),到客户端的LineEdit的setText槽(设置文本),这样如果编辑第一个LineEdit,第二个LineEdit便跟着变化。

       添加Init成员函数:

关联信号和槽:(注意,信号和槽函数的参数不能有变量声明)如:

       运行结果:


        我们可以自定义槽函数:

用关键字 slots在头文件中定义,可以有public private protected修饰。
注意:一定要加上Q_OBJECT宏。

正如前面介绍的,qt可以任意链接信号和槽。现在我们希望第一个LineEdit内容一旦改变,便发送信号给我们自定义的TextChengedSlot槽。我们自己在槽的响应中改变第二个LineEdit文本,这样我们应该修改信号的接受者,和接受者的槽函数:

       现在我们需要用到qt的一个工具:moc工具。它在qt安装目录下的bin目录里

1)运行->cmd->进入qt的安装目录bin目录下:
cd C:\Qt\4.8.2\bin
2)用moc工具为我们生成信号槽链接机制的moc文件:

Moc E:\vs2010_project\qttest\qttest\mainwindow.h –o E:\vs2010_project\qttest\qttest\moc_mainwindow.cpp

这样moc工具会在我们指定的目录下生成moc_mainwindow.cpp

把这个cpp加入到工程,编译,运行,运行结果:

6、最后

       QT的功能很多,支持序列化串行化,文档视图框架,还有信号槽内部机制,多语言,集成了其他优秀的第三方库,类型注册机制等等。

       此外,QT自带很多很方便的工具,QT Assistant(文档查询),QT Designer(界面设计),等,QT Creater(集成开发环境)集成了一系列工具,方便开发,希望以后有机会更进一步探讨,本文仅是QT入门,希望能给大家提供一定的借鉴或参考。

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

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

相关文章

1553B总线协议

参考地址 MIL-STD-1553B时分制指令/响应多路传输数据总线采用半双工传输方式。 1553B总线协议概述 1553B总线协议是一种军用标准,主要用于飞机上的设备间的信息传输。这种协议由美国军方制定,被广泛应用于航空、航天和军事领域的电子联网系统中。1553B…

LVI-GS:港大待开源、雷达-视觉-惯紧耦合,实时渲染

文章目录 摘要一、 介绍二、相关工作A 基于NeRF的SLAMB 基于3DGS的SLAM 三、方法A 超原语B. 3D 高斯投影C. 关键帧管理D. 基于金字塔的训练E. 高斯映射 四、实验 摘要 文章:github 介绍:介绍 3D高斯溅射(3DGS)在快速渲染和高保真…

2024年中国AI大模型场景应用趋势蓝皮书【附47页PPT】

目录 01 AI大模型行业应用概况 02 AI大模型行业应用现状及案例 03 AI大模型行业应用痛点及解决方案 04 AI大模型行业应用前景趋势及投资机会分析 如何学习AI大模型 ? “最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。 这句话,放在…

基于Zynq FPGA对雷龙SD NAND的测试

一、SD NAND 特征 1.1 SD 卡简介 雷龙的 SD NAND 有很多型号,在测试中使用的是 CSNP4GCR01-AMW 与 CSNP32GCR01-AOW。芯片是基于 NAND FLASH 和 SD 控制器实现的 SD 卡。具有强大的坏块管理和纠错功能,并且在意外掉电的情况下同样能保证数据的安全。 …

Spring Boot框架下的教育导师匹配系统

第一章 绪论 1.1 选题背景 如今的信息时代,对信息的共享性,信息的流通性有着较高要求,尽管身边每时每刻都在产生大量信息,这些信息也都会在短时间内得到处理,并迅速传播。因为很多时候,管理层决策需要大量信…

鉴源实验室·加密技术在汽车系统中的应用

随着汽车技术的快速发展,现代汽车已经不再是简单的交通工具,而是融合了多种智能功能的移动终端。无论是自动驾驶、车联网(V2X),还是车内娱乐系统,数据传输和存储已经成为汽车生态系统中的关键环节。然而&am…

Oracle数据库是什么?

Oracle Database,又名 Oracle RDBMS,简称 Oracle。Oracle 数据库系统是美国 Oracle 公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器(client/server)或B/S体系…

利用Docker Compose构建微服务架构

💓 博客主页:瑕疵的CSDN主页 📝 Gitee主页:瑕疵的gitee主页 ⏩ 文章专栏:《热点资讯》 利用Docker Compose构建微服务架构 引言 Docker Compose 简介 安装 Docker Compose 创建项目结构 编写 Dockerfile 前端 Dockerf…

macOS15.1及以上系统bug:开发者证书无法打开,钥匙串访问无法打开一直出现图标后立马闪退

团队紧跟苹果最新系统发现bug:今日设备信息如下,希望能带给遇到这个问题的开发者一点帮助。 错误图如下: 点击证书文件后,先出现钥匙串访问图标,后立马闪退消失 中间试过很多方法,都是一样的表现,最后好在解决了,看网上也没有相关的帖子,这里直接写解决办法和导致原因…

牵手APP引领交友新风尚,多元匹配助力寻找心仪伴侣

第54次《中国互联网络发展状况统计报告》数据显示,截至2024年6月,我国网民规模近11亿人,互联网普及率达78.0%。网络平台的普及,在便捷生活的同时,也衍生出一系列全新的领域与服务生态。如今,线上交友作为一…

C#WPF使用CommunityToolkit.Mvvm库

C#WPF之快速理解MVVM模式 接上篇介绍MVVM,这里使用相关库介绍MVVM。 CommunityToolkit.Mvvm CommunityToolkit.Mvvm介绍 CommunityToolkit.Mvvm是Microsoft Community Toolkit的一部分,它是一个轻量级但功能强大的MVVM(Model-View-ViewMod…

Pr 视频效果:ASC CDL

视频效果/颜色校正/ASC CDL Color Correction/ASC CDL ASC CDL ASC CDL效果通过对红、绿、蓝三个原色通道的独立调整,实现对图像色彩的精确控制。在此基础上,还可用于调整处理后图像的整体饱和度。 ◆ ◆ ◆ 效果选项说明 斜率 Slope、偏移 Offset和功…

【Linux】网络编程:应用层协议—HTTP协议(超详细)

目录 一、HTTP协议概念 HTTP协议的基本概念 HTTP的工作流程 二、认识URL URL 的基本结构 URLencode与URLdecode 三、认识HTTP协议 四、HTTP请求格式 1. 请求行(Request Line) 2. 请求报头(Request Headers) 3. 空行&a…

kelp protocol

道阻且长,行而不辍,未来可期 有很长一段时间我都在互联网到处拾金,but,东拼西凑的,总感觉不踏实,最近在老老实实的看官方文档 & 阅读白皮书 &看合约,挑拣一些重要的部分配上官方的证据,和过路公主or王子分享一下,愿我们早日追赶上公司里那些可望不可及大佬们。…

鸿蒙ArkTS中的布局容器组件(Scroll、List、Tabs)

1、Scroll组件 Scroll组件是一个可滚动的容器组件,用于在子组件的布局尺寸超过父组件尺寸时提供滚动功能。它允许在其内部容纳超过自身显示区域的内容,并通过滚动机制来查看全部内容。这对于显示大量信息(如长列表、长篇文本或大型图像等&…

【Qt聊天客户端-min_Bug】客户端请求失败分析

1. 问题复现 问题出现的背景:编写同意好友请求websocket通知功能时,电脑异常断电后,重启项目出现该为Bug 服务端日志 客户端发送请求 客户端日志 2. 排查 307行日志正常打印,说明请求发送的没有问题,开始排查连接问…

推荐一款PowerPoint转Flash工具:iSpring Suite

iSpring Suite是一款PowerPoint转Flash工具,使用iSpring Suite 8可以轻松的将PPT演示文档转换为对Web友好的Flash影片格式。软件界面简洁,使用方便。为什么要转换成flash格式呢?Flash格式的最大特点是体积小巧、易于分发,兼容所有的操作系统…

有的网站是通过js控制页面新打开一个tab页的,但是我想通过注入js脚本修改为在当前页面打开

如果网站通过 JavaScript 控制在新标签页中打开页面(例如使用 window.open()),你可以通过注入脚本来修改其行为,使其在当前页面打开。 解决方案 你可以通过覆盖 window.open 函数来强制将所有新页面在当前窗口中打开。以下是一个…

论文阅读笔记:DRCT: Saving Image Super-Resolution away from Information Bottleneck

论文阅读笔记:DRCT: Saving Image Super-Resolution away from Information Bottleneck 1 背景1.1 问题1.2 本文提出的方法 2 创新点3 方法4 模块4.1 问题描述4.2 深度特征提取模块4.3 同任务渐进式训练策略 5 效果5.1 和SOTA方法对比 论文:https://arxi…

TQZC706开发板教程:ADRV9009观测双通道接收波形

本例程使用ZC706加ADRV9009修改HDL项目,在vivaod中使用ila实时抓取两路接收波形。 将网盘链接中的BOO.BIN文件复制到SD卡中,插入开发板,并将开发板的启动模式设置为SD卡启动。插入电源,JTAG和串口。 在NO-OS的ADRV9009的项目中&am…