首页 > 编程语言 >使用C++和QT开发应用程序入门以及开发实例分享

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

时间:2024-11-07 12:50:25浏览次数:5  
标签:窗口 QT 布局 C++ 开发 专栏 net

目录

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入门,希望能给大家提供一定的借鉴或参考。

标签:窗口,QT,布局,C++,开发,专栏,net
From: https://blog.csdn.net/chenlycly/article/details/143585979

相关文章

  • 一文轻松了解AUTOSAR系统开发步骤顺序
    目录往期推荐AUTOSAR方法论的典型开发步骤顺序1. 需求分析(RequirementAnalysis)2. 系统架构设计(SystemArchitectureDesign)3.软件组件设计与实现(SoftwareComponentDesignandImplementation)4.ECU配置与基础软件配置(ECUConfigurationandBasicSoftwareConfigu......
  • Springboot应急物资采购系统2548l(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表学生,物资分类,物资商品,普通管理员开题报告内容一、研究背景与意义在当今社会,自然灾害、突发事件及公共卫生危机等不可预见事件频发,对社会的稳定与发展构成了......
  • C++ 的“百变魔法”:搞懂基本数据类型和变量
    编程世界里,数据就像材料,而基本数据类型就决定了这些材料能做什么。每种数据类型都有它自己的“特长”,我们可以用它们来处理不同的信息。今天,我们就来看看C++里最常见的几种基本数据类型:int,char,float,double,bool,以及如何用变量来存储这些数据。什么是数据类型?简单......
  • 王慧文回归带队美团探索 AI 应用;对话音频开源模型 Hertz-dev:120 毫秒超低延迟丨 RTE
       开发者朋友们大家好: 这里是「RTE开发者日报」,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享RTE(Real-TimeEngagement)领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「有看点的会议」,但内容仅代表编......
  • CUDA开始的GPU编程 - 第四章:C++封装GPU上的数组
    第四章:C++封装GPU上的数组std::vector的秘密:第二模板参数**你知道吗?**std::vector作为模板类,其实有两个模板参数:std::vector<T,AllocatorT>那为什么我们平时只用了std::vector呢?因为第二个参数默认是std::allocator。也就是std::vector等价于std::vector<T,s......
  • SpringBoot图书馆借阅管理系统49zr9 本系统(程序+源码+数据库+调试部署+开发环境)带论文
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表系统内容:读者,图书分类,图书信息,图书借阅,图书归还,图书主题,出版时间,出版社分布,图书统计开题报告内容一、研究背景与意义随着信息技术的快速发展,图书馆作......
  • SpringBoot突发性疾病管理系统8bsf3 (程序+源码+数据库+调试部署+开发环境)带论文文档1
    题目:SpringBoot突发性疾病管理系统8bsf3进度安排:(1)2024年11月1日-2024年11月15日 确定选题,下达任务书,撰写开题报告;(2)2024年11月15日-2024年12月20日提交开题报告定稿;(3)2024年12月21日-2025年3月14日 完成选题的设计、论文大纲的撰写;(4)2025年3月15日-2025年3月21日  ......
  • SpringBoot头条资讯的设计与实现ja10r 本系统(程序+源码+数据库+调试部署+开发环境)
    开题报告内容一、项目背景随着信息化社会的快速发展,人们对新闻资讯的需求日益多样化和即时化。传统的新闻媒体已难以满足用户个性化、快速获取信息的需求,因此,头条资讯类应用应运而生。本项目旨在设计和实现一个高效、智能的头条资讯系统,以满足用户对高质量、个性化资讯的迫切......
  • 应届生必看!23 个高质量 C++ 项目推荐,校招简历秒加分
    大家好,我是小康。最近,不少同学私信我,临近毕业忙着找工作,想问有没有推荐的C++项目,既能练手又能让简历更出彩。我也想起自己当年毕业时同样的焦虑,知道作为C++后端开发的求职者,有几个实际且吸引人的项目,能在面试时为自己增添不少分量。今天就结合我的经验,给大家推荐几个项目,都......
  • C++ explicit关键字
    C++explicit关键字explicit关键字是什么explicit是C++中的一个关键字,它用来修饰只有一个参数的类构造函数,以表明该构造函数是显式的,而非隐式的。当使用explicit修饰构造函数时,它将禁止类对象之间的隐式转换,以及禁止隐式调用拷贝构造函数。这能这么说,大家不太好理解,既......