QT入门

cnblogs 2024-07-11 10:39:00 阅读 73

1 QT概述

1.1 什么是QT

是一个跨平台的C++应用程序开发框架

具有短平快的优秀特质: 投资少、周期短、见效快、效益高

几乎支持所有的平台, 可用于桌面程序开发以及嵌入式开发

有属于自己的事件处理机制

可以搞效率的开发基于窗口的应用程序。

Qt是标准 C++ 的扩展, C++的语法在Qt中都是支持的

良好封装机制使得 Qt 的模块化程度非常高,可重用性较好,可以快速上手。

Qt 提供了一种称为 signals/slots 的安全类型来替代 callback(回调函数),这使得各个元件 之间的协同工作变得十分简单。

1.2 Qt的特点

广泛用于开发GUI程序,也可用于开发非GUI程序。

GUI = Graphical User Interface

也就是基于窗口的应用程序开发。

有丰富的 API

Qt 包括多达 250 个以上的 C++ 类

可以处理正则表达式。

支持 2D/3D 图形渲染,支持 OpenGL

Qt给程序猿提供了非常详细的官方文档

支持XML,Json

框架底层模块化, 使用者可以根据需求选择相应的模块来使用

可以轻松跨平台

和Java的跨平台方式不同

在不同的平台使用的是相同的上层接口,但是在底层封装了不同平台对应的API(暗度陈仓)。

1.3 Qt中的模块

Qt 基本模块(Qt Essentials):提供了 Qt 在所有平台上的基本功能。

Qt 附加模块(Qt Add-Ons):实现一些特定功能的提供附加价值的模块。

增值模块(Value-AddModules):单独发布的提供额外价值的模块或工具。

技术预览模块(Technology Preview Modules):一些处于开发阶段,但是可以作为技术预览使用的模块。

Qt 工具(Qt Tools):帮助应用程序开发的一些工具。

模块 描述
Qt Core Qt 类库的核心,所有其他模块都依赖于此模块
Qt GUI 设计 GUI 界面的基础类,包括 OpenGL
Qt Multimedia 音频、视频、摄像头和广播功能的类
Qt Multimedia Widgets 实现多媒体功能的界面组件类
Qt Network 使网络编程更简单和轻便的类
Qt QML 用于 QML 和 JavaScript语言的类
Qt Quick 用于构建具有定制用户界面的动态应用程序的声明框架
Qt Quick Controls 创建桌面样式用户界面,基于 Qt Quick 的用户界面控件
Qt Quick Dialogs 用于 Qt Quick 的系统对话框类型
Qt Quick Layouts 用于 Qt Quick 2 界面元素的布局项
Qt SQL 使用 SQL 用于数据库操作的类
Qt Test 用于应用程序和库进行单元测试的类
Qt Widgets 用于构建 GUI 界面的 C++ 图形组件类

1.4 Qt案例

VirtualBox:虚拟机软件。

VLC多媒体播放器:一个体积小巧、功能强大的开源媒体播放器。

YY语音:又名“歪歪语音”,是一个可以进行在线多人语音聊天和语音会议的免费软件。

咪咕音乐:咪咕音乐是中国移动倾力打造的正版音乐播放器

WPS Office:金山公司(Kingsoft)出品的办公软件,与微软Office兼容性良好,个人版免费。

Skype:一个使用人数众多的基于P2P的VOIP聊天软件。

1.5 相关文件

1.5.1 项目文件(.pro)

在创建的Qt项目中自动生成了一个后缀为 .pro 的项目文件,该文件中记录着项目的一些属性信息,具体信息如下:

<code># 在项目文件中, 注释需要使用 井号(#)

# 项目编译的时候需要加载哪些底层模块

QT += core gui

# 如果当前Qt版本大于4, 会添加一个额外的模块: widgets

# Qt 5中对gui模块进行了拆分, 将 widgets 独立出来了

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

# 使用c++11新特性

CONFIG += c++11

#如果在项目中调用了废弃的函数, 项目编译的时候会有警告的提示

DEFINES += QT_DEPRECATED_WARNINGS

# 项目中的源文件

SOURCES += \

main.cpp \

mainwindow.cpp

# 项目中的头文件

HEADERS += \

mainwindow.h

# 项目中的窗口界面文件

FORMS += \

mainwindow.ui

1.5.2 main.cpp

在这个源文件中有程序的入口函数 main(),下面给大家介绍下这个文件中自动生成的几行代码:

#include "mainwindow.h"// 生成的窗口类头文件

#include <QApplication>// 应用程序类头文件

int main(int argc, char *argv[])

{

// 创建应用程序对象, 在一个Qt项目中实例对象有且仅有一个

// 类的作用: 检测触发的事件, 进行事件循环并处理

QApplication a(argc, argv);

// 创建窗口类对象

MainWindow w;

// 显示窗口

w.show();

// 应用程序对象开始事件循环, 保证应用程序不退出

return a.exec();

}

1.5.3 mainwindow.ui

在Qt中每一个窗口都对应一个可编辑的可视化界面(*.ui), 这个界面对应的是一个xml格式的文件, 一般情况下不需要在xml格式下对这个文件进行编辑, 关于这个文件结构了解即可。

<!-- 双击这个文件看到的是一个窗口界面, 如果使用文本编辑器打开看到的是一个XML格式的文件 -->

<!-- 看不懂这种格式没关系, 我们不需要在这种模式下操作这个文件。 -->

<!-- 这里只是给大家介绍这个文件的本质 -->

<?xml version="1.0" encoding="UTF-8"?>code>

<ui version="4.0">code>

<class>MainWindow</class>

<widget name="MainWindow">code>

<property name="geometry">code>

<rect>

<x>0</x>

<y>0</y>

<width>800</width>

<height>600</height>

</rect>

</property>

<property name="windowTitle">code>

<string>MainWindow</string>

</property>

<widget name="centralwidget"/>code>

<widget name="menubar"/>code>

<widget name="statusbar"/>code>

</widget>

<resources/>

<connections/>

</ui>

1.5.4 mainwindow.h

这个文件是窗口界面对应的类的头文件。

#ifndef MAINWINDOW_H

#define MAINWINDOW_H

#include <QMainWindow>// Qt标准窗口类头文件

QT_BEGIN_NAMESPACE

// mainwindow.ui 文件中也有一个类叫 MainWindow, 将这个类放到命名空间 Ui 中

namespace Ui { class MainWindow; }

QT_END_NAMESPACE

class MainWindow : public QMainWindow

{

Q_OBJECT// 这个宏是为了能够使用Qt中的信号槽机制

public:

MainWindow(QWidget *parent = nullptr);

~MainWindow();

private:

Ui::MainWindow *ui;// 定义指针指向窗口的 UI 对象

};

#endif // MAINWINDOW_H

1.5.5 mainwindow.cpp

这个文件是窗口界面对应的类的源文件。

#include "mainwindow.h"

#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)

: QMainWindow(parent)

, ui(new Ui::MainWindow)// 基于mainwindow.ui创建一个实例对象

{

// 将 mainwindow.ui 的实例对象和 当前类的对象进行关联

// 这样同名的连个类对象就产生了关联, 合二为一了

ui->setupUi(this);

}

MainWindow::~MainWindow()

{

delete ui;

}



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。