Qt5开发从入门到精通——第一篇概述-程序员宅基地

技术标签: c++  qt  linux  Qt5开发从入门到精通  开发语言  

欢迎小伙伴的点评,相互学习、互关必回、全天在线
博主 本着开源的精神交流Qt开发的经验、将持续更新续章,为社区贡献博主自身的开源精神


一、什么是 Qt

`
Qt 是一个跨平台的 C++图形用户界面应用程序框架。它为应用程序开发者提供建立艺术级
图形用户界面所需的所有功能。它是完全面向对象的,很容易扩展,并且允许真正的组件编程。


1.1、Qt 的发展

Qt 是在 1991 年由奇趣科技公司开发的,于 1996 年进入商业领域,成为全世界范围内数千
种成功的应用程序的基础。它也是目前流行的 Linux 桌面环境 KDE 的基础, KDE 是 Linux 发行
版的主要一个标准组件。 2008 年,奇趣科技公司被诺基亚公司收购, Qt 成为诺基亚旗下的编程
语言工具。从 2009 年 5 月发布的 Qt4.5 版起,诺基亚公司宣布 Qt 源代码库面向公众开放, Qt 开
发人员可通过为 Qt 及与其相关的项目贡献代码、翻译、示例及其他内容,协助引导和塑造 Qt
的未来发展。 2011 年, Digia 公司(芬兰的一家 IT 服务公司)从诺基亚公司收购了 Qt 的商业版权 。
2012 年 8 月 9 日,作为非核心资产剥离计划的一部分,诺基亚公司宣布将 Qt 软件业务正式出售
给 Digia 公司。 2013 年 7 月 3 日,Digia公司 Qt 开发团队在其官方博客上宣布 Qt 5.1 正式版发
布;同年 12 月 11 日,又发布 Qt 5.2 正式版。 2014 年 4 月,跨平台集成开发环境 Qt Creator 3.1.0
正式发布;同年 5 月 20 日,配套发布了 Qt 5.3 正式版。至此, Qt 实现了对于 iOS 、 Android 、 WP
等各种平台的全面支持。 The Qt Company 公司成立后, Qt 版本的升级开始加速,相继推出
Qt 5.4/5.5/5.6/5.7 版,并在官网提供免费下载。 2017 年 1 月 23 日,众所期待的 Qt 5.8 正式版如
期发布,它集中体现了之前各版 Qt 产品的优势,进一步扩展了 Qt 的框架,提升了速度和性能。
尤其对 Qt 的 Qt Quick Controls 2 库及 3D 支待方面进行了重大优化和升级。 2018 年 5 月, Qt 发
布了最新的 Qt 5.11 版。

1.2、Qt 版本说明

Qt 按照不同的版本发行,分为商业版和开源版 。 Qt 商业版为商业软件提供开发环境,它们
提供传统商业软件发行版,并且提供在协议有效期内的免费升级和技术支待服务。而 Qt 开源版
是为了开发自由而设计的开放源代码软件,它提供了和商业版本同样的功能,在 GNU 通用公共
许可证下,它是免费的。

1.3、Qt5开发环境简介

在 Qt 程序开发过程中,除可以通过手写代码实现软件开发功能外,还可以通过 Qt 的 GUI
界面设计器 (Qt Designer) 进行界面的绘制和布局。该工具提供了 Qt 的基本可绘制窗口部件,
如 QWidget、 QLabel 、 QPushButton 和 QVBoxLayout 等。在设计器中用鼠标直接拖曳这些窗口
部件,能够高效、快速地实现 GUI 界面的设计,界面直观形象,所见即所得。 Qt 设计器主界面如下图所示
在这里插入图片描述
进入 Qt 设计器主界面后,看到的设计区窗体部分(如下图所示)就是将要设计的顶层窗口部件(顶层窗口部件是其他子窗口部件的载体)。
在这里插入图片描述
在 Qt 设计器主界面的左侧”组件箱”栏中列出了经常使用的 Qt 标准窗口部件,可以直
接拖曳相应的窗口部件图标到顶层窗口部件的界面上。同时,也可以将设计的窗口部件组合
(通过布局管理器对 Qt 标准窗口部件进行布局和组合)或放置其他窗口部件的 Qt 容器类(见
”组件箱”栏中的 “Containers” 组)直接拖曳到“组件箱”栏中, Qt 设计器会自动在”组件
箱”栏中生成" Scratchpad" 组,并生成新的自定义的窗口部件。此后,可以像使用 Qt 提供
的标准窗口部件一样使用新创建的窗口部件。
选中 Qt 设计器主界面的“控件" -> "视图”中的全部选项,在 Qt 设计器主界面上可以看
到设计器提供的一些编辑工具子窗口(如图 1.13 所示)。
• 对象查看器 (Object Inspector): 列出了主界面中所有窗口部件,以及各窗口部件的父
子关系和包容关系。
• 属性编辑器 (Property Editor): 列出了窗口部件可编辑的属性。
• Action 编辑器 (Action Editor): 列出了为窗口部件设计的 QAction 动作,通过“添加”或
“删除”按钮可以新建一个可命名的 QAction 动作或删除指定的 QAction 动作。
• 信号和槽编辑器 (Signals & Slots Editor): 列出了在 Qt 设计器中关联的信号和槽,通过
双击列中的对象或信号/槽,可以进行对象的选择和信号/槽的选择。
此外,通过 Qt 设计器的“编辑”菜单,可以打开 Qt 设计器主界面的四种 GUI 窗口部件编
辑模式。
• 控件编辑模式 (Edit Widgets): 可以在 Qt 设计器主界面中添加 GUI 窗口部件并修改它
们的属性和外观。
• 信号/槽编辑模式 (Edit Signals/Slots): 可以在 Qt 设计器主界面中的窗口部件上关联 Qt
已经定义好的信号和槽。
• 伙伴编辑模式 (Edit Buddies): 可以在 Qt 设计器主界面中的窗口部件上建立 QLabel 标
签和其他窗口部件的伙伴关系。
•Tab 顺序编辑模式 (Edit Tab Order): 可以在 Qt 设计器主界面中的窗口部件上设置 Tab
键在窗口部件上的焦点顺序。

二、简单项目设计

2.1、设计器 Qt ~DesJgner 实现

【例】(简单) 采用设计器 Qt Designer 实现计算圆面积,完成如下图所示的功能
首先进行界面设计,然后编写相应的计算圆面积代码。

2.1.1 界面设计

步骤如下。
(1) 单击运行 Qt Creator, 进入 Qt Creator 初始界面。单击上端的
new Project 按钮,或者选择“文件" – “新建文件或项目..”命令,创建一个新项目,出
现“新建项目”窗口(如下图2.1.1 所示)。
(2) 单击选择项目 “Application” -> “Qt Widgets Application” 选项,单击 “Choose …”
按钮。
编程者需要创建什么样的项目就选择相应的项目选项即可。例如, “Qt Console Application”
选项是创建一个基千控制台的项目。这里因为需要建立一个桌面应用程序,所以选择"Qt Widgets
Application”(如下图2.1.2所示) 。
(3) 选择保存项目的路径并定义自己项目的名字。注意,保存项目的路径中不能有中文。
项目命名没有大小写要求,依据个人习惯命名即可。这里将项目命名为 Dialog, 保存路径为
D:\Qt_1, (如下图2.1.3 所示)。单击“下一步”按钮。
(4) 弹出“粔t Selection” (选择构建套件)界面,系统默认已指定 C++ 的编译器和调试器,
(如下图2.1.4所示),直接单击“下一步”按钮。
(5) 根据实际需要,选择一个“基类”。这里选择 QDialog 对话框类作为基类,这时“类名“
“头文件”“源文件”“界面文件”都出现默认的文件名。注意,对这些文件名都可以根据具体需
要进行相应的修改。默认选中“创建界面“复选框(如下图2.1.5 所示),表示需要采用界面设计器
来设计界面,否则须要利用代码完成界面的设计。
(6) 选择完成后单击“下一步”按钮,相应的文件自动加载到项目文件列表中,如下图2.1.5 所示)。
图2.1.1
在这里插入图片描述

图2.1.2
在这里插入图片描述
图2.1.3
在这里插入图片描述
图2.1.4
在这里插入图片描述
图2.1.5
在这里插入图片描述
图2.1.6
在这里插入图片描述

2.2.1编写相应的计算圆面积代码

首先简单认识一下 Qt 编程环境。找到文件列表中自动添加的 main.cpp 文件,如图 1.21 所示。
每个工程都有一个执行的入口函数,此文件中的 main()函数就是此工程的入口 。
下面详细介绍 main()函数的相关内容:

#include "dialog.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    
    QApplication a(argc, argv);
    Dialog w;
    w.show();

    return a.exec();
}

其中,

( a) #include “dialog.h”: 包含了程序中要完成功能的 Dialog 类的定义,在 Dialog 类中封装
完成所需要的功能。注意,使用哪个类就必须将包含该类的头文件引用过来。例如,若用到一
个按钮类,则必须在此处添加一行代码 #include < QPushButton >, 这表明包含了按钮
(QPushButton) 类的定义。

( b) #include < QApplication >: Application 类的定义。在每个使用 Qt 图形化应用程序中都必
须使用一个 QApplication 对象。 QApplication 管理了各种各样的图形化应用程序的广泛资源、基
本设置、控制流及事件处理等。

( c) int main(int argc, char *argv[ ]): 应用程序的入口,几乎在所有使用 Qt 的情况下, main()
函数只需要在将控制转交给 Qt 库之前执行初始化,然后 Qt 库通过事件向程序告知用户的行为。
所有 Qt 程序中都必须有且只有一个 main()函数。 main()函数有两个参数,即 argc 和 argv ,argc
是命令行变量的数量, argv 是命令行变量的数组。

( d) QApplication a(argc, argv): a 是这个程序的 QApplication 对象。在任何 Qt 的窗口系统
部件被使用之前必须创建 QApplication 对象。它在这里被创建并且处理这些命令行变量。所有
被 Qt 识别的命令行参数都将从 argv 中被移去(并且 argc 也因此而减少)。

( e) w.show( ): 当创建一个窗口部件的时候,默认它是不可见的,必须调用 show( )函数使它
变为可见。

( f) return a.exec( ): 程序进入消息循环,等待可能的输入进行响应。这里就是 main() 函数将
控制权转交给 Qt, Qt 完成事件处理工作,当应用程序退出的时候, exec( )函数的值就会返回。
在 exec()函数中, Qt 接收并处理用户和系统的事件并且将它们传递给适当的窗口部件。

2.2.2 编写相应的计算圆面积代码方式

现在,有两种方式可以完成计算圆面积功能:一是通过触发按钮事件完成(方式 1); 二是
通过触发输入编辑框事件完成(方式 2) 。
方式 1: 在 “lineEdit” 文本框内输入半径值,然后单击按钮,则在 lineEdit_2
中显示对应的圆面积。
编写代码步骤如下。
(1) 在“计算”按钮上按鼠标右键,在弹出的下拉菜单中选择“转到槽…”命令,在“转到
槽”对话框中选择 QAbstractButton 的 “clicked( )” 信号,单击 “OK” 按钮,如图 2.2.1 、图2.2.2 、图2.2.3 、图 2.2.4(对象)所示。
图 2.2.1
在这里插入图片描述
打开ui界面后,把相应的控件拉取到编辑框内,如下图2.2 。
图2.2

在这里插入图片描述

图2.2.2
在这里插入图片描述
图2.2.3
在这里插入图片描述
图 2.2.4(对象)
在这里插入图片描述

(2) 进入 dialog.cpp 文件中按钮单击事件的槽函数 on_pushButton_clicked()。信号与槽连接的
具体说明后面篇章会说明。在此函数中添加如下代码:

void Dialog::on_pushButton_clicked()
{
    
    bool ok;
    QString tempStr;
    QString valueStr = ui->lineEdit->text();
    int valueInt = valueStr.toInt(&ok);
    double area = valueInt*valueInt*PI;
    ui->lineEdit_2->setText(tempStr.setNum(area));
}

(3) 在 dialog.cpp 文件开始处添加以下语句:

const static double PI = 3.1416;

定义全局变量 PI 。

方法2: 在 “Line Edit” 文本框内输入半径值,不需要单击按钮触发单击事件,直接就在
lineEdit_2 中显示圆面积。
编写代码步骤如下。
(1) 在 “Line Edit” 文本框上按鼠标右键,在弹出的下拉菜单中选择“转到槽…”命令,在
“转到槽”对话框中选择 QLineEdit 的 “textChanged(QString)” 信号,如图 2.2.5 所示。
在这里插入图片描述
( 2) 单击 “OK” 按钮,进入 dialog.cpp 文件中的文本编辑框改变值内容事件的槽函数
on_lineEdit_textChanged(const QString &arg1)。在此函数中添加如下代码

void Dialog::on_lineEdit_textChanged(const QString &arg1)
{
    
    bool ok;
    QString tempStr;
    QString valueStr = ui->lineEdit->text();
    int valueInt = valueStr.toInt(&ok);
    double area = valueInt*valueInt*PI;
    ui->lineEdit_2->setText(tempStr.setNum(area));
}

运行此程序,在 “Line Edit” 文本框中输入半径值后,直接在 lineEdit_2 中显示圆的面积
值,完成计算圆面积的功能。

三 、dialog.cpp源码如下

#include "dialog.h"
#include "ui_dialog.h"
const static double PI = 3.1416;
Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)
{
    
    ui->setupUi(this);
}

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

void Dialog::on_pushButton_clicked()
{
    
    bool ok;
    QString tempStr;
    QString valueStr = ui->lineEdit->text();
    int valueInt = valueStr.toInt(&ok);
    double area = valueInt*valueInt*PI;
    ui->lineEdit_2->setText(tempStr.setNum(area));
}

void Dialog::on_lineEdit_textChanged(const QString &arg1)
{
    
    bool ok;
    QString tempStr;
    QString valueStr = ui->lineEdit->text();
    int valueInt = valueStr.toInt(&ok);
    double area = valueInt*valueInt*PI;
    ui->lineEdit_2->setText(tempStr.setNum(area));
}

四 、效果图 如下

在这里插入图片描述
编译后

在这里插入图片描述
输入2
在这里插入图片描述

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

智能推荐

JWT(Json Web Token)实现无状态登录_无状态token登录-程序员宅基地

文章浏览阅读685次。1.1.什么是有状态?有状态服务,即服务端需要记录每次会话的客户端信息,从而识别客户端身份,根据用户身份进行请求的处理,典型的设计如tomcat中的session。例如登录:用户登录后,我们把登录者的信息保存在服务端session中,并且给用户一个cookie值,记录对应的session。然后下次请求,用户携带cookie值来,我们就能识别到对应session,从而找到用户的信息。缺点是什么?服务端保存大量数据,增加服务端压力 服务端保存用户状态,无法进行水平扩展 客户端请求依赖服务.._无状态token登录

SDUT OJ逆置正整数-程序员宅基地

文章浏览阅读293次。SDUT OnlineJudge#include<iostream>using namespace std;int main(){int a,b,c,d;cin>>a;b=a%10;c=a/10%10;d=a/100%10;int key[3];key[0]=b;key[1]=c;key[2]=d;for(int i = 0;i<3;i++){ if(key[i]!=0) { cout<<key[i.

年终奖盲区_年终奖盲区表-程序员宅基地

文章浏览阅读2.2k次。年终奖采用的平均每月的收入来评定缴税级数的,速算扣除数也按照月份计算出来,但是最终减去的也是一个月的速算扣除数。为什么这么做呢,这样的收的税更多啊,年终也是一个月的收入,凭什么减去12*速算扣除数了?这个霸道(不要脸)的说法,我们只能合理避免的这些跨级的区域了,那具体是那些区域呢?可以参考下面的表格:年终奖一列标红的一对便是盲区的上下线,发放年终奖的数额一定一定要避免这个区域,不然公司多花了钱..._年终奖盲区表

matlab 提取struct结构体中某个字段所有变量的值_matlab读取struct类型数据中的值-程序员宅基地

文章浏览阅读7.5k次,点赞5次,收藏19次。matlab结构体struct字段变量值提取_matlab读取struct类型数据中的值

Android fragment的用法_android reader fragment-程序员宅基地

文章浏览阅读4.8k次。1,什么情况下使用fragment通常用来作为一个activity的用户界面的一部分例如, 一个新闻应用可以在屏幕左侧使用一个fragment来展示一个文章的列表,然后在屏幕右侧使用另一个fragment来展示一篇文章 – 2个fragment并排显示在相同的一个activity中,并且每一个fragment拥有它自己的一套生命周期回调方法,并且处理它们自己的用户输_android reader fragment

FFT of waveIn audio signals-程序员宅基地

文章浏览阅读2.8k次。FFT of waveIn audio signalsBy Aqiruse An article on using the Fast Fourier Transform on audio signals. IntroductionThe Fast Fourier Transform (FFT) allows users to view the spectrum content of _fft of wavein audio signals

随便推点

Awesome Mac:收集的非常全面好用的Mac应用程序、软件以及工具_awesomemac-程序员宅基地

文章浏览阅读5.9k次。https://jaywcjlove.github.io/awesome-mac/ 这个仓库主要是收集非常好用的Mac应用程序、软件以及工具,主要面向开发者和设计师。有这个想法是因为我最近发了一篇较为火爆的涨粉儿微信公众号文章《工具武装的前端开发工程师》,于是建了这么一个仓库,持续更新作为补充,搜集更多好用的软件工具。请Star、Pull Request或者使劲搓它 issu_awesomemac

java前端技术---jquery基础详解_简介java中jquery技术-程序员宅基地

文章浏览阅读616次。一.jquery简介 jQuery是一个快速的,简洁的javaScript库,使用户能更方便地处理HTML documents、events、实现动画效果,并且方便地为网站提供AJAX交互 jQuery 的功能概括1、html 的元素选取2、html的元素操作3、html dom遍历和修改4、js特效和动画效果5、css操作6、html事件操作7、ajax_简介java中jquery技术

Ant Design Table换滚动条的样式_ant design ::-webkit-scrollbar-corner-程序员宅基地

文章浏览阅读1.6w次,点赞5次,收藏19次。我修改的是表格的固定列滚动而产生的滚动条引用Table的组件的css文件中加入下面的样式:.ant-table-body{ &amp;amp;::-webkit-scrollbar { height: 5px; } &amp;amp;::-webkit-scrollbar-thumb { border-radius: 5px; -webkit-box..._ant design ::-webkit-scrollbar-corner

javaWeb毕设分享 健身俱乐部会员管理系统【源码+论文】-程序员宅基地

文章浏览阅读269次。基于JSP的健身俱乐部会员管理系统项目分享:见文末!

论文开题报告怎么写?_开题报告研究难点-程序员宅基地

文章浏览阅读1.8k次,点赞2次,收藏15次。同学们,是不是又到了一年一度写开题报告的时候呀?是不是还在为不知道论文的开题报告怎么写而苦恼?Take it easy!我带着倾尽我所有开题报告写作经验总结出来的最强保姆级开题报告解说来啦,一定让你脱胎换骨,顺利拿下开题报告这个高塔,你确定还不赶快点赞收藏学起来吗?_开题报告研究难点

原生JS 与 VUE获取父级、子级、兄弟节点的方法 及一些DOM对象的获取_获取子节点的路径 vue-程序员宅基地

文章浏览阅读6k次,点赞4次,收藏17次。原生先获取对象var a = document.getElementById("dom");vue先添加ref <div class="" ref="divBox">获取对象let a = this.$refs.divBox获取父、子、兄弟节点方法var b = a.childNodes; 获取a的全部子节点 var c = a.parentNode; 获取a的父节点var d = a.nextSbiling; 获取a的下一个兄弟节点 var e = a.previ_获取子节点的路径 vue

推荐文章

热门文章

相关标签