使用C++和QT开发应用程序入门以及开发实例分享
目录
1、搭建开发环境(VS2010和QT4.8.2)
2、创建一个QT窗口
3、在QT窗口中添加子窗口
4、QT界面布局
5、QT信号(SIGNAL)和槽(SLOT)
6、最后
C++软件异常排查从入门到精通系列教程(专栏文章列表,欢迎订阅,持续更新...)https://blog.csdn.net/chenlycly/article/details/125529931C/C++实战专栏(专栏文章已更新460多篇,持续更新中...)
https://blog.csdn.net/chenlycly/article/details/140824370C++ 软件开发从入门到精通(专栏文章,持续更新中...)
https://blog.csdn.net/chenlycly/category_12695902.htmlVC++常用功能开发汇总(专栏文章列表,欢迎订阅,持续更新...)
https://blog.csdn.net/chenlycly/article/details/124272585C++软件分析工具从入门到精通案例集锦(专栏文章,持续更新中...)
https://blog.csdn.net/chenlycly/article/details/131405795开源组件及数据库技术(专栏文章,持续更新中...)
https://blog.csdn.net/chenlycly/category_12458859.html网络编程与网络问题分享(专栏文章,持续更新中...)
https://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++软件调试与异常排查从入门到精通系列文章汇总https://blog.csdn.net/chenlycly/article/details/125529931
本专栏根据多年C++软件异常排查的项目实践,系统地总结了引发C++软件异常的常见原因以及排查C++软件异常的常用思路与方法,详细讲述了C++软件的调试方法与手段,以图文并茂的方式给出具体的项目问题实战分析实例(很有实战参考价值),带领大家逐步掌握C++软件调试与异常排查的相关技术,适合基础进阶和想做技术提升的相关C++开发人员!
考察一个开发人员的水平,一是看其编码及设计能力,二是要看其软件调试能力!所以软件调试能力(排查软件异常的能力)很重要,必须重视起来!能解决一般人解决不了的问题,既能提升个人能力及价值,也能体现对团队及公司的贡献!
专栏中的文章都是通过项目实战总结出来的,包含大量项目问题实战分析案例,有很强的实战参考价值!专栏文章还在持续更新中,预计文章篇数能更新到200篇以上!
专栏2:(本专栏涵盖了C++多方面的内容,是当前重点打造的专栏,订阅量已达200多个,专栏文章已经更新到460多篇,持续更新中...)
C/C++实战进阶(专栏文章,持续更新中...)https://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++常用软件分析工具从入门到精通案例集锦汇总(专栏文章,持续更新中...)https://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++常用功能开发汇总(专栏文章,持续更新中...)https://blog.csdn.net/chenlycly/article/details/124272585
将10多年C++开发实践中常用的功能,以高质量的代码展现出来。这些常用的高质量规范代码,可以直接拿到项目中使用,能有效地解决软件开发过程中遇到的问题。
专栏5:
C++ 软件开发从入门到精通(专栏文章,持续更新中...)https://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入门,希望能给大家提供一定的借鉴或参考。
相关文章:

使用C++和QT开发应用程序入门以及开发实例分享
目录 1、搭建开发环境(VS2010和QT4.8.2) 2、创建一个QT窗口 3、在QT窗口中添加子窗口 4、QT界面布局 5、QT信号(SIGNAL)和槽(SLOT) 6、最后 C软件异常排查从入门到精通系列教程(专栏文章列…...

Openlayers高级交互(20/20):超级数据聚合,页面不再混乱
本示例在vue+openlayers中使用cluster生成聚合数据的效果。在OpenLayers中实现点聚合(clustering)是一个常见的需求,特别是在处理大量地理数据点时。聚合可以提高地图的性能并减少视觉上的混乱。 一、示例效果图 专栏名称内容介绍Openlayers基础实战 (72篇)专栏提供73篇文…...

qt QStandardItemModel详解
1、概述 QStandardItemModel是Qt框架中提供的一个基于项的模型类,用于存储和管理数据,这些数据可以以表格的形式展示在视图控件(如QTableView、QTreeView等)中。QStandardItemModel支持丰富的数据操作,包括添加、删除…...

光伏设计软件如何快速上手?
光伏设计软件是现代光伏系统设计不可或缺的工具,它们大大简化了设计流程,提高了设计效率。对于新手来说,快速上手一款光伏设计软件可能会显得有些困难,但只要掌握了一些基础操作,就能迅速提升设计技能。 1、导入CAD图片…...

Mac下安装Apache JMeter并启动
一、下载JMeter https://jmeter.apache.org/download_jmeter.cgi 下载好对应的压缩包,解压后即可,并将解压后的文件夹放至自己想要存放的位置。 二、启动JMeter 进入解压后的文件夹下的bin目录cd /usr/local/apache-jmeter-5.6.3/bin配置语言vim jmet…...

L6.【LeetCode笔记】合并两个有序链表
1.题目 https://leetcode.cn/problems/merge-two-sorted-lists/ 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1: 输入:l1 [1,2,4], l2 [1,3,4] 输出:[1,1,2,3,4,4]示例 2&…...

讲解Golang选择语句
Golang选择语句 1. if 语句1.1 基本语法1.2 if-else 语句1.3 if-else if-else 语句1.4 简短声明和初始化1.5 多个条件的逻辑运算 2. switch 语句2.1 基本语法2.2 示例2.3 switch 语句与 if 的对比2.4 不指定表达式2.5 fallthrough 语句2.6 case 支持多个值 3. 总结 Go语言中的选…...

练习LabVIEW第四十一题
学习目标: 编写一个程序测试自己在程序前面板上输入一段文字“CSDN是一个优秀的网站”所用的时间。 开始编写: 前面板放置一个数值显示控件,程序框图添加顺序结构共三帧,第一帧放一个获取日期/时间(秒)函…...

应对AI与机器学习的安全与授权管理新挑战,CodeMeter不断创新引领保护方案
人工智能(AI)和机器学习(ML)技术正在快速发展,逐渐应用到全球各类主流系统、设备及关键应用场景中,尤其是在政府、商业和工业组织不断加深互联的情况下,AI和ML技术的影响日益广泛。虽然AI技术的…...

【2024最新版Kotlin教程】Kotlin第一行代码系列第五课-类继承,抽象类,接口
【2024最新版Kotlin教程】Kotlin第一行代码系列第五课-类继承,抽象类,接口 为什么要有继承呢,现实中也是有继承的,对吧,你继承你爸的遗产,比如你爸建好了一个房子,儿子继承爸,就得了…...

虚拟现实和增强现实技术,如何打造沉浸式体验?
内容概要 在这个科技飞速发展的时代,虚拟现实(VR)与增强现实(AR)技术的结合就像调皮的小精灵,一下子把我们的生活变得神奇又有趣。想象一下,你正在游戏中与精灵搏斗,突然间身边的客…...

ChatGPT任务设计和微调策略的优化
目录 ChatGPT任务设计和微调策略的优化 一、GPT-3的基础 二、任务设计和微调策略的优化 三、基于人类反馈的强化学习(RLHF) 举例 完全注意力机制的自回归解码器网络 一、定义与原理 二、举例说明 ChatGPT任务设计和微调策略的优化 ChatGPT确实是从GPT-3开始,通过任…...

通过 SSH 连接远程 Ubuntu 服务器
目录 安装 SSH 服务器允许 SSH 通过防火墙远程 SSH 连接(选)重启向日葵 安装 SSH 服务器 更新软件包列表 sudo apt update安装 OpenSSH 服务器 sudo apt install openssh-server检查 SSH 服务器状态 sudo systemctl status ssh如果 SSH 服务器正在运…...

Perl 环境安装
Perl 环境安装 Perl 是一种广泛使用的高级、通用、解释型、动态编程语言。它最初由 Larry Wall 在 1987 年设计,现在由 Perl 5 和 Perl 6 两个主要版本组成。Perl 适合于多种编程任务,包括系统管理、Web 开发、网络编程、游戏开发等。在开始使用 Perl 进行编程之前,您需要在…...

【NOIP提高组】引水入城
【NOIP提高组】引水入城 💐The Begin💐点点关注,收藏不迷路💐 在一个遥远的国度,一侧是风景秀美的湖泊,另一侧则是漫无边际的沙漠。该国的行政 区划十分特殊,刚好构成一个N行M列的矩形ÿ…...

openvino python推理demo
openvino python推理demo import openvino from openvino.runtime import Core import numpy as np import argparse import hashlib import os import ioclass OpenvinoInfer:def __init__(self,device_id0):self.device_iddevice_idself.ie Core()self.available_devices …...

JavaWeb项目-----博客系统
一.设计数据库 1.创建数据库 create database if not exists java108_blog_system character set utf8; drop table if exists user; drop table if exists blog;2.创建博客列表 create table blog(blogId int primary key auto_increment,title varchar(20),content varcha…...

GY-56 (VL53L0X) 激光测距
文章目录 一、GY-56 简介二、引脚功能三、通信协议1.串口协议: 当 GY-56 PS 焊点开放时候使用(默认)(1)串口通信参数(默认波特率值 9600bps)(2)模块输出格式,每帧包含 8-13 个字节&a…...

当今陪玩系统小程序趋势,陪玩系统源码搭建后的适用于哪些平台
一、市场规模持续扩大 随着全球游戏市场的不断膨胀,游戏陪玩行业正逐渐从一个新兴领域成长为游戏产业链中不可或缺的一环。据《2024年1~6月中国游戏产业报告》显示,今年上半年,国内游戏市场实际销售收入达到1472.67亿元,同比增长…...

qt QListWidget详解
1、概述 QListWidget 是 Qt 框架中的一个类,它提供了一个基于模型的视图,用于显示项目的列表。QListWidget 继承自 QAbstractItemView 并为项目列表提供了一个直观的接口。与 QTreeView 和 QTableView 不同,QListWidget 是专门为单行或多行项…...

java ssm 校园快递物流平台 校园快递管理系统 物流管理 源码 jsp
一、项目简介 本项目是一套基于SSM的校园快递物流平台,主要针对计算机相关专业的和需要项目实战练习的Java学习者。 包含:项目源码、数据库脚本、软件工具等。 项目都经过严格调试,确保可以运行! 二、技术实现 后端技术&#x…...

西安电子科技大学考研网报审核通过了,然后呢?
报考西安电子科技大学的宝贝们,考研网上确认已经截止的同学们,不用担心! 最近,有很多同学问到一个问题:网上确认时看到有消息说禁止使用海马体照片,但我明明用了海马体的照片,审核却通过了&…...

pandas习题 051:将字符串数据读取到 DataFrame
编码题)有以下逗号隔开和空格隔开的字符串数据,如何将它读取为 DataFrame ? data = ‘’’ a,b,c 1,3,4 2,4,5 ‘’’ data2 = ‘’’ a b c 1 13 214 2 4 15 ‘’’ Python 代码如下:import pandas as pd import iodata = a,b,c 1,3,4 2,4,5 df = pd.read_csv(io.Stri…...

改进探路者算法复现
本文所涉及所有资源均在 传知代码平台 可获取。 目录 一、背景及意义介绍 (一)背景 ...

PostgreSQL 学习笔记:PostgreSQL 主从复制
PostgreSQL 笔记:PostgreSQL 主从复制 博客地址:TMDOG 的博客 在现代应用程序中,数据库的高可用性和扩展性是至关重要的。PostgreSQL 提供了主从复制功能,可以在多个数据库实例之间复制数据,以实现冗余和负载均衡。本…...

【系统架构设计师(第2版)】十一、未来信息综合技术
未来信息综合技术是指近年来新技术发展而提出的一些新概念、新知识、新产品,主要包括信息物理系统(CPS)、人工智能(AI)、机器人、边缘计算、数字孪生、云计算和大数据等技术。这些技术涉及多学科、多领域,具…...

Pytorch学习--神经网络--优化器
一、头文件 torch.optim.Optimizer(params, defaults) optim文档 for input, target in dataset:optimizer.zero_grad()output model(input)loss loss_fn(output, target)loss.backward()optimizer.step()二、代码 不带优化器的代码框架 import torch import torchvision…...

w~自动驾驶合集11
我自己的原文哦~ https://blog.51cto.com/whaosoft/12329152 #特斯拉的“纯视觉”路线 , 也许不是最好的 BEVTransformer占用网络技术路线的大热,再次将激光雷达推向风口浪尖。 激光雷达该不该被抛弃? 对车企来说,这是一个艰难的抉择&am…...

大数据新视界 -- 大数据大厂之 Impala 性能优化:解锁大数据分析的速度密码(上)(1/30)
💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…...

GESP4级考试语法知识(算法概论(三))
爱因斯坦的阶梯代码: //算法1-12 #include<iostream> using namespace std; int main() {int n1; //n为所设的阶梯数while(!((n%21)&&(n%32)&&(n%54)&&(n%65)&&(n%70)))n; //判别是否满足一组同余式cout<<n<…...