C++学习| QT快速入门_qt c++快速入门-程序员宅基地

技术标签: 学习  C++学习  c++  qt  

QT Creater

Qt Creator是使用Qt开发的IDE,集成了Qt Designer、Qt Assistant、Help等工具,可以在开发的时候使用Designer来可视化设计界面。

创建QT项目

打开QT Creater->“创建项目”。

后面的博客思路是跟着创建QT项目的步骤走的,但是会补充创建项目过程中遇到的概念。

选择项目类型——不同项目类型的区别

在这里插入图片描述

QT项目模板类型

  • Application(QT): “应用”项目生成可执行程序,针对C++。
  • Application(QT for Python):针对Python的 “应用”项目。
  • Library: “库” 项目生成静态库或动态库。
  • 其他项目:辅助类项目。
  • Non-Qt Project: “非Qt应用”项目。
  • Test Projection:测试程序,用来做测试的。

因为本篇文章要做得是QT C++软件的入门,所以选择Application(QT)。

Application(QT)分类

  • Qt Widgets Application:桌面应用软件。
  • Qt Console Application:控制台应用软件。
  • Qt Quick Application:移动应用软件。

选择QT大部分都是因为想用QT做界面,桌面应用的界面比较好入门学习,所以本文案例选择的Qt Widgets Application(桌面应用软件)。

输入项目名字和路径

输入项目名字和路径,注意项目名称不能包含空格与中文。包含的话,创建过程中不会报错,但程序无法运行出窗口。

选择合适的构建系统——不同构建系统的却别

构建系统类别分别是qmake、CMake和Qbs。

  • qmake:QT提供的默认构建系统工具,使用 .pro 文件来描述项目的配置和构建规则,是QT传统的构建工具,易于上手和使用。
  • CMake:跨平台的构建系统工具,使用 CMakeLists.txt 文件来描述项目的配置和构建规则,适用非QT和QT项目,语法相对复杂,但是更加灵活和强大,支持多种生成器例如Visual Studio工程。
  • Qbs:QT 5.7 版本引入的新型构建工具,使用 .qbs 文件来描述项目的配置和构建规则,语法更简洁和现代,更加模块化和可扩展化等。

这里选择qmake,因为qmake是QT默认提供的,参考也比较多,作为新手是一个比较好的入门选择。

选择合适的类——QT基本类之间的关系

在这里插入图片描述

Class name是类名,Header file后缀.h是头文件,Source file后缀.cpp是具体实现相关的文件,Form file后缀.ui是界面相关的资源文件。如果有用过别的可视化编程软件,应该对这种文件结构都并不陌生。

Base class选择主要有三种QMainWindow、QWidget和QDialog。

QT中的窗口和控件一般统称为部件(Widget),窗口指的是程序的整体界面,可以包含标题栏、菜单栏、工具栏各种控件等;控件是指各种按钮、复选框、文本框和进度条等。

QWidget是所有界面元素的基类,所以QMainWindow和QDialog是QWidget的两个派生类。QMainWindow就是窗口类,自动生成包含菜单栏、工具栏和标题栏等的界面。QDialog是对话框窗口类,会生成一个界面,但是没有菜单栏、工具栏、状态栏等,一般用来做短期任务。选QWidget会生成一个完全空白的窗口。

看自己需要的窗口类型选择QMainWindow或者QDialog,如果不确定,可以选择QWidget。

这里因为没有什么特殊的需求,所以选择了QWidget进行创建。

Translation File

如果项目需要做多语言翻译,可以选择,可以对界面中菜单栏、label、对话框等进行翻译。如果不需要的话,直接默认无就行了。

选择构建套件——MinGW和MSVC的区别

window下通常会有MinGW和MSVC可以选。

MinGW(Minimalist GNUfor Windows): 一个开源的编译器,是基于 GNU 工具链的 Windows 版本,比较轻量而且能够跨平台,但是和某些库可能不兼容。

MSVC(Microsoft Visual C++):由微软开发的VC运行时库,被Visual Studio IDE所集成,使用VS就会附带,可执行文件会比较大。

MinGW和MSVC的关系:MinGW和MSVC都是编译工具,但是两个编译工具兼容并不好。使用MinGW编译的使用,要用MSVC编译生成的库时就会有问题。使用MinGW编译项目的时候,所使用的Lib也要是MinGW编译的。根据自己调用的库是什么类型编译,可以选择不同的编译工具。

入门的话最好使用MinGW,如果有相关需求,可以根据自己需求选择。

简单案例:加法器

设计界面——构建加法器界面

如何进入设计界面

  • 点击相应的ui后缀文件。
  • 点击左边功能栏的“设计”,但是这个需要先点击过一次ui后缀文件。
    在这里插入图片描述

设计界面各个部分的功能
在这里插入图片描述

编排加法器界面,把需要的控件点击拖入到窗口界面中,并排列好。
在这里插入图片描述

控件文本修改方法,有两种方法:第一种,在控件属性中找到text进行修改;第二种,或者直接右键->“改变纯文本”。

QT还可以很方便对文本进行美化,可以像word那样对文本格式进行快速的修改,也有两种方法:

  • 在控件属性中找到text,后面会有“…”,点击即可跳转到文本美化功能。
    在这里插入图片描述

  • 直接右键控件->“改变格式文本”。

信号和槽——界面和代码交互原理

信号与槽(Signal & Slot)是QT的一个创新,用来方便处理各个组件的交互操作。类似于观察者模式,让互不干扰的对象之间建立一种联系,当信号发出适合,被来连接的槽函数就会自动被回调。

信号(Signal)是指的在特定情况下被发射的事件,例如PushButton被鼠标点击触发clicked事件信号。
除了部件自带的事件信号,也可以自定义信号,定义要求如下:

  • 信号是类的成员函数。
  • 返回值必须是void类型。
  • 信号需要使用signals关键字进行声明,类似public等关键字。
  • 信号只需要声明,不需要具体实现。
signals:
    void signal_01();
    void signal_01(QString);

(Slot)是对应信号响应的函数,和普通C++成员函数基本没有区别,唯一区别在于可以被信号触发。
自定义槽函数的要求如下:

  • 返回值必须是void类型。
  • 槽函数可以是类的成员函数、全局函数、静态函数、Lambda表达式(匿名函数)。
  • 槽函数的参数要和信号匹配,但可以小于信号的参数,因为槽函数是用来接受信号传递的数据。
public slots:
    void slot_01();
    void slot_01(QString);

关联信号和槽的方法

  • 自动关联:
    • 直接从控件ui右键->“转到槽”。
    • 按“on_对象名_事件名”的格式手动添加槽方法。
  • 手动关联:
    通过connect函数进行信号和槽的关联,connect使用格式如下:
    QObject::connect(sender, SIGNAL(signal()), receiver, SLOT(slot()));
    sender是信号的发送者(类对象),signal是发送的信号,receiver是信号的接收者(类对象),slot是处理函数(槽函数)。
    当sender调用了signal的时候,receiver当中的slot就会响应。

信号和槽之间的关系

  • 两者都是独立的个体,只因为交互的需求而关联到了一起。
  • 一个信号可以连接到多个槽。
  • 一个槽可以被多个信号连接。
  • 信号也可以连接到信号,例如某个信号发射会导致另一个信号发射。
  • 信号的参数可以大于等于槽函数的个数。

交互代码实现加法器

加法器的运作逻辑:输入两个整数,然后点击“相法”按钮会把两个数加起来显示在label中;点击取消会把两个输入框里面的数字清空。

修改控件ID:通常编程都不会用默认的控件ID,可以改为比较直观的命名,UI设计界面的左上角双击控件对象名字即可修改。
在这里插入图片描述
“加法”按钮响应:使用自动关联来设置“加法”按钮点击后响应的槽函数,右键“加法”按钮->“转到槽”->clicked(),test01.cpp中会出现void Test01::on_addButton_clicked()函,为on_addButton_clicked()添加加法代码逻辑即可。
在这里插入图片描述
在这里插入图片描述

“取消”按钮响应:“加法”按钮实现用的是自动关联,所以“取消”按钮的实现采用手动关联作为演示。编写一个不符合“on_对象名_事件名”自动关联命名格式的槽函数,然后用conncet关联“取消”按钮的“clicked”信号。

如果需要关联控件的信号找不到,可以在IDE的左边菜单中的帮助,选择“索引”搜索控件的类名,查看该类的所有信号Signals。
在这里插入图片描述

完整代码
test01.h

#ifndef TEST01_H
#define TEST01_H

#include <QMainWindow>

QT_BEGIN_NAMESPACE
namespace Ui {
    
class Test01;
}
QT_END_NAMESPACE

class Test01 : public QMainWindow
{
    
    Q_OBJECT

public:
    Test01(QWidget *parent = nullptr);
    ~Test01();

private slots:
    void on_addButton_clicked();// 加法按钮的槽函数声明
    void cancelButton_clicked();// 取消按钮的槽函数声明

private:
    Ui::Test01 *ui;
};
#endif // TEST01_H

test01.cpp

#include "test01.h"
#include "ui_test01.h"

Test01::Test01(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::Test01)
{
    
    ui->setupUi(this);
    // 设置标题
    this->setWindowTitle("加法器");
    // 手动关联
    connect(ui->cancelButton, SIGNAL(clicked()), this, SLOT(cancelButton_clicked()));
}

Test01::~Test01()
{
    
    delete ui;
}

void Test01::on_addButton_clicked()
{
    
    // 获取lineedit的数据
    QString a_str=ui->inputEdite1->text();
    QString b_str=ui->inputEdite2->text();
    // 把QString转为int
    int a=a_str.toInt();
    int b=b_str.toInt();
    // a和b相加
    int ans=a+b;
    // 设置结果显示在label上
    ui->label->setText("结果:"+QString::number(ans, 10));
}

void Test01::cancelButton_clicked(){
    
    ui->inputEdite1->clear();
    ui->inputEdite2->clear();
    ui->label->setText("结果:清空");
}

运行结果
加法
在这里插入图片描述

取消
在这里插入图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_40306845/article/details/135730415

智能推荐

分布式光纤传感器的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告_预计2026年中国分布式传感器市场规模有多大-程序员宅基地

文章浏览阅读3.2k次。本文研究全球与中国市场分布式光纤传感器的发展现状及未来发展趋势,分别从生产和消费的角度分析分布式光纤传感器的主要生产地区、主要消费地区以及主要的生产商。重点分析全球与中国市场的主要厂商产品特点、产品规格、不同规格产品的价格、产量、产值及全球和中国市场主要生产商的市场份额。主要生产商包括:FISO TechnologiesBrugg KabelSensor HighwayOmnisensAFL GlobalQinetiQ GroupLockheed MartinOSENSA Innovati_预计2026年中国分布式传感器市场规模有多大

07_08 常用组合逻辑电路结构——为IC设计的延时估计铺垫_基4布斯算法代码-程序员宅基地

文章浏览阅读1.1k次,点赞2次,收藏12次。常用组合逻辑电路结构——为IC设计的延时估计铺垫学习目的:估计模块间的delay,确保写的代码的timing 综合能给到多少HZ,以满足需求!_基4布斯算法代码

OpenAI Manager助手(基于SpringBoot和Vue)_chatgpt网页版-程序员宅基地

文章浏览阅读3.3k次,点赞3次,收藏5次。OpenAI Manager助手(基于SpringBoot和Vue)_chatgpt网页版

关于美国计算机奥赛USACO,你想知道的都在这_usaco可以多次提交吗-程序员宅基地

文章浏览阅读2.2k次。USACO自1992年举办,到目前为止已经举办了27届,目的是为了帮助美国信息学国家队选拔IOI的队员,目前逐渐发展为全球热门的线上赛事,成为美国大学申请条件下,含金量相当高的官方竞赛。USACO的比赛成绩可以助力计算机专业留学,越来越多的学生进入了康奈尔,麻省理工,普林斯顿,哈佛和耶鲁等大学,这些同学的共同点是他们都参加了美国计算机科学竞赛(USACO),并且取得过非常好的成绩。适合参赛人群USACO适合国内在读学生有意向申请美国大学的或者想锻炼自己编程能力的同学,高三学生也可以参加12月的第_usaco可以多次提交吗

MySQL存储过程和自定义函数_mysql自定义函数和存储过程-程序员宅基地

文章浏览阅读394次。1.1 存储程序1.2 创建存储过程1.3 创建自定义函数1.3.1 示例1.4 自定义函数和存储过程的区别1.5 变量的使用1.6 定义条件和处理程序1.6.1 定义条件1.6.1.1 示例1.6.2 定义处理程序1.6.2.1 示例1.7 光标的使用1.7.1 声明光标1.7.2 打开光标1.7.3 使用光标1.7.4 关闭光标1.8 流程控制的使用1.8.1 IF语句1.8.2 CASE语句1.8.3 LOOP语句1.8.4 LEAVE语句1.8.5 ITERATE语句1.8.6 REPEAT语句。_mysql自定义函数和存储过程

半导体基础知识与PN结_本征半导体电流为0-程序员宅基地

文章浏览阅读188次。半导体二极管——集成电路最小组成单元。_本征半导体电流为0

随便推点

【Unity3d Shader】水面和岩浆效果_unity 岩浆shader-程序员宅基地

文章浏览阅读2.8k次,点赞3次,收藏18次。游戏水面特效实现方式太多。咱们这边介绍的是一最简单的UV动画(无顶点位移),整个mesh由4个顶点构成。实现了水面效果(左图),不动代码稍微修改下参数和贴图可以实现岩浆效果(右图)。有要思路是1,uv按时间去做正弦波移动2,在1的基础上加个凹凸图混合uv3,在1、2的基础上加个水流方向4,加上对雾效的支持,如没必要请自行删除雾效代码(把包含fog的几行代码删除)S..._unity 岩浆shader

广义线性模型——Logistic回归模型(1)_广义线性回归模型-程序员宅基地

文章浏览阅读5k次。广义线性模型是线性模型的扩展,它通过连接函数建立响应变量的数学期望值与线性组合的预测变量之间的关系。广义线性模型拟合的形式为:其中g(μY)是条件均值的函数(称为连接函数)。另外,你可放松Y为正态分布的假设,改为Y 服从指数分布族中的一种分布即可。设定好连接函数和概率分布后,便可以通过最大似然估计的多次迭代推导出各参数值。在大部分情况下,线性模型就可以通过一系列连续型或类别型预测变量来预测正态分布的响应变量的工作。但是,有时候我们要进行非正态因变量的分析,例如:(1)类别型.._广义线性回归模型

HTML+CSS大作业 环境网页设计与实现(垃圾分类) web前端开发技术 web课程设计 网页规划与设计_垃圾分类网页设计目标怎么写-程序员宅基地

文章浏览阅读69次。环境保护、 保护地球、 校园环保、垃圾分类、绿色家园、等网站的设计与制作。 总结了一些学生网页制作的经验:一般的网页需要融入以下知识点:div+css布局、浮动、定位、高级css、表格、表单及验证、js轮播图、音频 视频 Flash的应用、ul li、下拉导航栏、鼠标划过效果等知识点,网页的风格主题也很全面:如爱好、风景、校园、美食、动漫、游戏、咖啡、音乐、家乡、电影、名人、商城以及个人主页等主题,学生、新手可参考下方页面的布局和设计和HTML源码(有用点赞△) 一套A+的网_垃圾分类网页设计目标怎么写

C# .Net 发布后,把dll全部放在一个文件夹中,让软件目录更整洁_.net dll 全局目录-程序员宅基地

文章浏览阅读614次,点赞7次,收藏11次。之前找到一个修改 exe 中 DLL地址 的方法, 不太好使,虽然能正确启动, 但无法改变 exe 的工作目录,这就影响了.Net 中很多获取 exe 执行目录来拼接的地址 ( 相对路径 ),比如 wwwroot 和 代码中相对目录还有一些复制到目录的普通文件 等等,它们的地址都会指向原来 exe 的目录, 而不是自定义的 “lib” 目录,根本原因就是没有修改 exe 的工作目录这次来搞一个启动程序,把 .net 的所有东西都放在一个文件夹,在文件夹同级的目录制作一个 exe._.net dll 全局目录

BRIEF特征点描述算法_breif description calculation 特征点-程序员宅基地

文章浏览阅读1.5k次。本文为转载,原博客地址:http://blog.csdn.net/hujingshuang/article/details/46910259简介 BRIEF是2010年的一篇名为《BRIEF:Binary Robust Independent Elementary Features》的文章中提出,BRIEF是对已检测到的特征点进行描述,它是一种二进制编码的描述子,摈弃了利用区域灰度..._breif description calculation 特征点

房屋租赁管理系统的设计和实现,SpringBoot计算机毕业设计论文_基于spring boot的房屋租赁系统论文-程序员宅基地

文章浏览阅读4.1k次,点赞21次,收藏79次。本文是《基于SpringBoot的房屋租赁管理系统》的配套原创说明文档,可以给应届毕业生提供格式撰写参考,也可以给开发类似系统的朋友们提供功能业务设计思路。_基于spring boot的房屋租赁系统论文