前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >QT入门基础(一)

QT入门基础(一)

作者头像
用户9645905
发布2023-03-12 10:47:58
1.2K0
发布2023-03-12 10:47:58
举报
文章被收录于专栏:Linux学习~Linux学习~

文章目录

零.Qt背景

1.什么是Qt

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

2.Qt的发展史

  1. 1991年 Qt最早由芬兰奇趣科技开发
  2. 1996年 进入商业领域,它也是目前流行的Linux桌面环境KDE的基础
  3. 2008年 奇趣科技被诺基亚公司收购,Qt称为诺基亚旗下的编程基础
  4. 2012年 Qt又被Digia公司(芬兰一家软件公司)收购
  5. 2014年4月 跨平台的集成开发环境Qt Creator3.1.0发布,同年5月20日配发了Qt5.3正式版,至此Qt实现了对iOS、Android、WP等各平台的全面支持

3.Qt的优势

  1. 跨平台,几乎支持所有的平台
  2. 接口简单,容易上手,学习QT框架对学习其他框架有参考意义
  3. 一定程度上简化了内存回收机制
  4. 开发效率高,能够快速的构建应用程序
  5. 有很好的社区氛围,市场份额在缓慢上升
  6. 可以进行嵌入式开发

4.Qt应用

  1. Linux桌面环境KDE(K Desktop Environment)
  2. WPS Office 办公软件
  3. Google Earth 谷歌地球

一.第一个Qt程序

0.项目创建

Qt的项目分为三个基类:QMainWindow,QWidget,QDialog

image-20230310204759993
image-20230310204759993
  • 三个基类之间的关系:
image-20230310205138150
image-20230310205138150

注:对于初学者创建Qwidget的项目就可以了

1.main函数文件

image-20230310204145688
image-20230310204145688
  • 解释:
  1. Qt系统提供的类头文件没有.h后缀
  2. Qt一个类对应一个头文件,类名和头文件名一致
  3. QApplication表示应用程序类
  • 对于QApplication:
  1. QApplication管理图形用户界面应用程序的控制流和主要设置
  2. nQApplication类对象是Qt生命,一个程序要确保一直运行,就肯定至少得有一个循环,这就是Qt主消息循环,在其中完成来自窗口系统和其它资源的所有事件消息处理和调度。它也处理应用程序的初始化和结束,并且提供对话管理
  3. 对于任何一个使用Qt的图形用户界面应用程序,都正好存在一个QApplication 对象,不论这个应用程序在同一时刻有多少个窗口
  • a.exec():
  1. 程序进入消息循环,等待对用户输入进行响应
  2. 这里main()把控制权转交给Qt,Qt完成事件处理工作,当应用程序退出的时候exec()的值就会返回
  3. 在exec()中,Qt接受并处理用户和系统的事件并且把它们传递给适当的窗口部件
  • 执行a.exec()即类似于如下代码:
image-20230310205712470
image-20230310205712470

2.类头文件

代码语言:javascript
复制
class HelloWidget : public QWidget
{
    //引入qt信号和槽的一个宏
    Q_OBJECT

public:
    //parent窗口指针,父窗口对象的指针
    //如果parent为0或者nullptr,表示当前窗口对象是一个顶层窗口
    //顶层窗口即为在任务栏可以找到的窗口
    HelloWidget(QWidget *parent = nullptr);
    ~HelloWidget();

private:

};

3.pro文件

代码语言:javascript
复制
#引入Qt的模块,core gui
QT       += core gui
#如果qt版本大于4,那么引入widgets模块
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
# 表示使用过时的api 则会报错
DEFINES += QT_DEPRECATED_WARNINGS
#要编译的源文件列表
SOURCES += \
        main.cpp \
        mywidget.cpp
#要编译的头文件列表
HEADERS += \
        mywidget.h
# 默认的生成规则
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
  • .pro文件的规则:
  1. 注释:从“#”开始,到这一行结束
  2. 模块引入:QT += 模块名,表示当前项目引入Qt哪些模块
  3. 工程中包含的头文件:HEADERS += include/painter.h
  4. 工程中包含的源文件:SOURCES += sources/main.cpp sources
  5. 工程中包含的资源文件:RESOURCES += qrc/painter.qrc
  6. greaterThan(QT_MAJOR_VERSION, 4): QT += widgets:如果QT_MAJOR_VERSION大于4(也就是当前使用的Qt5及更高版本)需要增加widgets模块
  7. 配置信息:CONFIG用来告诉qmake关于应用程序的配置信息,CONFIG += c++11 //使用c++11的特性(qt5.6以上版本默认使用C++11)

4.qt命名规范

类名:单词首字母大写,单词和单词之间直接连接,无需连接字符

代码语言:javascript
复制
MyClass,QPushButton
class MainWindow

Qt中内置的类型,头文件和类命名同名

代码语言:javascript
复制
#include <QString>
QSring str;
#include <QWidget>
QWidget w;

函数名字,变量名:首字母小写,之后每个单词首字母大写,单词和单词之间直接连接,无需连接字符

代码语言:javascript
复制
void connectTheSignal();

类的成员变量设置函数用使用 set+成员变量名,获取成员变量的函数直接用成员变量名(如果是bool类型,有可能会用一些表示状态的术语,如isVisilble,hasFocus):

代码语言:javascript
复制
//普通成员变量设置和获取
void setText(QString text);
QString text()const;
//bool的成员变量设置和获取
void setEnabled(bool enabled);
bool isEnabled()const;

二.Qt按钮

1.按钮创建和父子关系

在Qt程序中,最常用的控件之一就是按钮

代码语言:javascript
复制
#include <QPushButton>

QPushButton * btn = new QPushButton; 

//设置父亲
btn->setParent(this);
//设置文字
btn->setText("按钮1");
//移动位置
btn->move(100,100);
//第二种创建
QPushButton * btn2 = new QPushButton("按钮2",this);
//重新指定窗口大小
this->resize(600,400);
//设置窗口标题
this->setWindowTitle("第一个项目");
//限制窗口大小
this->setFixedSize(600,400);
  • 说明:
  1. 一个按钮其实就是一个QPushButton类的对象,如果只是创建出对象,是无法显示到窗口中的,就需要依赖一个父窗口,也就是指定一个父亲,而调用按钮的show()函数只能让按钮独立显示
  2. 利用setParent函数或者按钮创建的时候通过构造函数传参,此时我们称两个窗口建立了父子关系
  3. 在有父窗口的情况下,窗口调用show会显示在父窗口中,如果没有父窗口,那么窗口调用show显示的会是一个顶层的窗口
image-20230310213506669
image-20230310213506669

2.按钮常用api

  1. 设置按钮上显示的文字可以用:setText()
  2. 移动按钮位置用:move()
  3. 修改左上角窗口的标题:setWindowTitle()
  4. 重新指定窗口大小:resize()
  5. 设置固定的窗口大小:setFixedSize()
  6. 同时设置窗只位置和大小:setGeometry()(相当于move和resize的结合体)
  • 示例:
image-20230310213710282
image-20230310213710282

3.Qt窗口坐标体系

通过以上代码可以看出Qt的坐标体系

以左上角为原点(0,0),以向右的方向为x轴的正方向,以向下方向为y轴的正方向

img
img

对于嵌套窗口,其坐标是相对于父窗口来说的 顶层窗口的父窗口就是屏幕

4.对象树模型

QObject是Qt里边绝大部分类的根类

QObject对象之间是以对象树的形式组织起来的 当两个QObject(或子类)的对象建立了父子关系的时候。子对象就会加入到父对象的一个成员变量叫children(孩子)的list(列表)中 当父对象析构的时候,这个列表中的所有对象也会被析构

image-20230310214115071
image-20230310214115071

QWidget是能够在屏幕上显示的一切组件的父类

QWidget继承自QObject,因此也继承了这种对象树关系。一个孩子自动地成为父组件的一个子组件。我们向某个窗口中添加了一个按钮或者其他控件(建立父子关系),当用户关闭这个窗口的时候,该窗口就会被析构,之前添加到他上边的按钮和其他控件也会被一同析构

Qt 引入对象树的概念,在一定程度上解决了内存问题

在 Qt 中尽量在构造的时候就指定 parent 对象,并且大胆在堆上创建

84AA8k-1678505328521)]

QWidget是能够在屏幕上显示的一切组件的父类

QWidget继承自QObject,因此也继承了这种对象树关系。一个孩子自动地成为父组件的一个子组件。我们向某个窗口中添加了一个按钮或者其他控件(建立父子关系),当用户关闭这个窗口的时候,该窗口就会被析构,之前添加到他上边的按钮和其他控件也会被一同析构

Qt 引入对象树的概念,在一定程度上解决了内存问题

在 Qt 中尽量在构造的时候就指定 parent 对象,并且大胆在堆上创建

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-03-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 零.Qt背景
    • 1.什么是Qt
      • 2.Qt的发展史
        • 3.Qt的优势
          • 4.Qt应用
          • 一.第一个Qt程序
            • 0.项目创建
              • 1.main函数文件
                • 2.类头文件
                  • 3.pro文件
                    • 4.qt命名规范
                    • 二.Qt按钮
                      • 1.按钮创建和父子关系
                        • 2.按钮常用api
                          • 3.Qt窗口坐标体系
                            • 4.对象树模型
                            领券
                            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档