Qt知识笔记(一)

2023-11-16

Qt概述

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

具有短平快的优秀特质:投资少、周期短、见效快、效益高。
几乎支持所有的平台,可用于桌面程序开发以及嵌入式开发
有属于自己的事件处理机制
可以高效率地开发基于窗口的应用程序

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

良好封装机制使得 Qt 的模块化程度非常高,可重用性较好,可以快速上手
Qt 提供了一种称为 signals/slots 的安全类型来替代 callback(回调函数),这使得各个元件 之间的协同工作变得十分简单。

Qt特点

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

GUI = Graphical User Interface
也就是基于窗口的应用程序开发

有丰富的 API

Qt 包括多达 250 个以上的 C++ 类
可以处理正则表达式

支持 2D/3D 图形渲染,支持 OpenGL
Qt 给程序猿提供了非常详细的官方文档
支持 XML,Json
框架底层模块化, 使用者可以根据需求选择相应的模块来使用
可以轻松跨平台

和 Java 的跨平台方式不同
在不同的平台使用的是相同的上层接口,但是在底层封装了不同平台对应的 API

Qt模块

Qt的模块分为以下几类:
Qt基本模块: 提供了Qt在所有平台上的基本功能
Qt 附加模块: 实现一些特定功能的提供附加价值的模块
增值模块: 单独发布的提供额外价值的模块或工具。
技术预览模块: 一些处于开发阶段,但是可以作为技术预览使用的模块
Qt 工具: 帮助应用程序开发的一些工具。

Qt窗口类

Qt常用的窗口类有3个: QWidget,QDialog,QMainWindow
创建窗口的时候,需要继承它们中的其中一个。
QWidget: 是所有窗口类的基类,Qt 中的控件也属于窗口,基类都是 QWidget

可以内嵌到其他窗口中:没有边框
可以不内嵌单独显示:独立的窗口,有边框

QDialog: 对话框类,不能内嵌到其他窗口中
QMainWindow: 有工具栏,状态栏,菜单栏,

不能内嵌到其他窗口中

Qt窗口有内嵌和非内嵌窗口
内嵌窗口: 依附于一个大窗口,作为其一部分,成为其子窗口,父窗口显示的时候它就被显示
非内嵌窗口: 有边框,有标题栏,需要调用函数才能显示

坐标体系

Qt中窗口的位置是根据坐标确定的,所有的坐标都要先找到坐标原点,Qt的坐标原点就在左上角,其中x轴向右递增,y轴向下递增

相对坐标

Qt每个窗口都有自己的坐标原点,子窗口使用的坐标点就是父窗口坐标体系中的坐标点,也就是子窗口的位置是通过父窗口的原点确定的。
在这里插入图片描述

垃圾回收机制

Qt 引入对象树的概念,在一定程度上解决了内存问题。
当一个 QObject 对象在堆上创建的时候,Qt 会同时为其创建一个对象树。不过,对象树中对象的顺序是没有定义的。这意味着,销毁这些对象的顺序也是未定义的。
任何对象树中的 QObject 对象 delete 的时候,如果这个对象有 parent,则自动将其从 parent 的 children () 列表中删除;如果有孩子,则自动 delete 每一个孩子。Qt 保证没有 QObject 会被 delete 两次,这是由析构顺序决定的。
Qt中有垃圾回收机制,但不是所有被new出来的对象被自动回收,满足以下两个条件才可以回收

创建的对象必须是QObject类的子类或间接子类
创建出的类对象,必须指定其父对象

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Qt知识笔记(一) 的相关文章

  • Qt 为什么使用 QString::number() 而不是 QLocale().toString()?

    我正在开发的应用程序将在许多国家推出 并且需要支持他们的语言 我一直在回顾我的代码并替换以下每个实例 QString number and QString toDouble with QLocale toString and QLocale
  • 使用 CMake 编译时更改头文件位置会导致缺少 vtable 错误

    对于一个大型 C 项目 我需要从 qmake 过渡到 CMake 但是在处理一个玩具示例时 我遇到了一些我不理解的行为 示例代码具有单个头文件 当该头文件移动到子目录中时 我收到 MainWindow 类缺少 vtable 的错误 CMak
  • 使用 OpenGL 渲染 QImage

    与我相关的其他问题 https stackoverflow com questions 20126354 render qimage from sooffscreenrenderer in qglwidget 我认为更核心的问题是 如何渲染
  • 将 jstring 转换为 QString

    我正在调用一个返回字符串的 Java 函数 QAndroidJniObject obj QAndroidJniObject callStaticObjectMethod
  • Qt 嵌入式触摸屏 QMouseEvents 在收到 MouseButtonRelease 之前未收到

    我在带有触摸屏的小型 ARM 嵌入式 Linux 设备上使用 Qt 4 8 3 我的触摸屏配置了 tslib 并对其进行了校准 因此 etc 中有一个 pointcal 文件 我的触摸事件的位置工作得很好 但无论如何我都会在鼠标按下或鼠标释
  • Qt:不完整类型和前向声明的使用无效

    我有一些误解 A h ifndef A H define A H include B h class A public B Q OBJECT public A endif A cpp include A h A A B ui gt blan
  • Qt中Q_PROPERTY的意义是什么?

    我无法理解 Q PROPERTY 的用法 Q PROPERTY 如何帮助程序具有防御性 它是干什么用的 我看过这个论坛 但确实无法应用 我已经理解了这个例子 但不明白它的用法 这是一个例子 我能从中得到什么 我知道阅读将赋予只读特权 wri
  • Qt中用于线程间通信的类设计

    问题陈述 用相机跟踪物体并相应地移动相机的方位角和仰角 Process 相机获取物体的图像 处理相机的每一帧以查找物体 应该被跟踪 并将每帧中生成的信息传递给机械设备 万向节 以平移和倾斜方式移动摄像机 Design 主 Gui 在一个线程
  • 如何将自定义 Qt 类型与 QML 信号一起使用?

    我在 Qt 5 2 qml 应用程序中创建了一个自定义类型 class Setting public QObject Q OBJECT Q PROPERTY QString key READ key WRITE setKey Q PROPE
  • 了解 Qt3D 创建的网格

    我创建了一个 Qt3D 网格 如下所示 Qt3DCore QEntity newEntity new Qt3DCore QEntity Qt3DExtras QConeMesh mesh new Qt3DExtras QConeMesh m
  • Qt(在 Windows 上)将权限级别设置为“requireAdministrator”

    我正在使用 Qt Creator 并努力制作 exe文件默认以管理员身份运行 在线阅读所有解决方案我试图将这一行放入我的 pro file QMAKE LFLAGS MANIFESTUAC level requireAdministrato
  • 通过引用传递 [C++]、[Qt]

    我写了这样的东西 class Storage public Storage QString key const int value const void add item QString int private QMap
  • 为什么 QT 设计器重新调整大小或不允许我缩小或展开小部件或按钮?

    很多时候 在使用 QT 设计器时 我发现自己需要通过缩小或扩展来调整事物的大小 每当我尝试这样做时 程序都不允许我这样做 而只是恢复到将对象放置在窗口中时给我的原始默认大小 无论我的布局如何 为什么要这样做 是否有可能改变这一点 以便我可以
  • Qt 相当于 .NET 数据绑定吗?

    Qt 中是否有相当于 NET 数据绑定的功能 我想使用引用数据库中特定实体的 QString 填充一些组合框和其他小部件 但是 如果我可以将数据绑定到这些字符串 而不是基于新的组合框选择再次查询数据库 或者基于构建我自己的将使用 QStri
  • 使用 C++ 访问 Azure blob 存储 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • QML MouseArea 将事件传播到按钮

    我正在开发一个应用程序 其菜单类似于 Android 版 Gmail 收件箱应用程序菜单 基本上 当您按下按钮打开菜单时 它就会滑入视图 用户可以将其滑开或按菜单上的按钮 对于滑动我使用了代码SwipeArea from kovrov ht
  • QWebEngineView 在 load() 或 page() 方法上崩溃

    我正在致力于将 Qt 5 5 QWebView 项目移植到 Qt 5 6 测试版 QWebEngine 我已经阅读了移植指南here https wiki qt io Porting from QtWebKit to QtWebEngine
  • 日历小部件的特定单元格如何着色?

    日历小部件的特定单元格如何着色 我认为你应该扩展 QCalendar 类并添加一些行为 我在这里找到了一些东西 http www qtforum org article 21614 paintcell and qcalendarwidget
  • Qt 和 Sqlite 示例

    我正在寻找一些使用 Qt 的示例代码 它是带有 Sqlite 驱动程序的 SQL 模块 我需要示例的主要原因是我之前有 Qt 数据库接口的经验 并且 Sqlite 在字段类型方面有一些奇怪的行为 类型是按字段存储的 而不是按列存储的 The
  • PyQt:在运行时向滚动区域添加小部件

    我试图在运行时通过按下按钮来添加新的小部件 在下面的示例中我使用标签 这里是例子 import sys from PyQt4 QtCore import from PyQt4 QtGui import class Widget QWidge

随机推荐

  • 浅谈std::move和std::forward原理

    前言 本文主要整理了C 11中std move和std forward的原理 这对理解C 的移动拷贝有很重的意义 一 左值和右值 左值 一般来说 能在内存中取得其地址 即是左值 右值 在内存在无取得其地址的 即是右值 note 左值持久 右
  • Python中MNE库模拟原始脑电数据

    研究脑电算法的时候发现了一个问题 如何评价模型的准确性 之前的工作流程都是先用公开数据集的数据训练好模型 然后放到实测数据上进行参数微调 在公开数据集上进行模型的选择主要是因为公开数据集的数据质量较好 可以排除硬件的影响 从而专心于算法的研
  • RTL仿真验证

    注意 个人学习笔记 后续会进行修改完善 目前还在初步学习阶段 参考gitee上 从零开始写RISC V处理器 在写testbench文件时 有两点需要注意的 第一点就是在testbench文件里加上读指令文件的操作 initial begi
  • Pandas中插入新的行或列

    python中插入新行或列 前言 一 新增列 二 新增行 前言 在特定位置插入行或者列是比较常用的操作 具体的插入操作主要是在哪插入和插入什么 提示 以下是本篇文章正文内容 下面案例可供参考 一 新增列 在pandas中新增列用到的是ins
  • 编写C++中的两个类 一个只能在栈中分配空间 一个只能在堆中分配(腾讯2012面试题)

    编写C 中的两个类 一个只能在栈中分配空间 一个只能在堆中分配 腾讯2012面试题 这道题挺好的 HeapOnly cpp include
  • windows修改远程端口号

    windows远程桌面默认使用的是3389 为了提高服务器安全性 可以修改默认端口3389为其它端口号 端口使用原则 TCP与UDP段结构中端口地址都是16比特 所以端口范围在0 65535 对于这65536个端口号有以下的使用规定 1 端
  • java 根据已有ppt模板修改其内容

    现有需求 根据数据库数据 定期更新 ppt 报表内容 本文修改内容 主要是 ppt中的图表 测试ppt 代码 package org springblade bigdata ureport service impl import java
  • (一)win10安装hadoop 2.8.5(详细步骤)

    目录 1 JDK 2 Hadoop 2 1 下载 2 2 配置环境变量 2 3 配置文件 2 4 格式化hdfs 已解决 格式化总是报错 The markup in the document following the root eleme
  • JavaSwing结合windowBuilder以及BeautyEye开源UI框架快速实现美观的界面

    前言 虽然Java Swing现在公司用的比较少 但是我们平时学习中经常会用它来做一些小项目或者学校的任务 这个时候我们就发现Swing提供给我们的原生控件太丑了 下面教大家如何快速搭建美观的JavaSwing桌面程序 1 准备工作 首先通
  • GRPC详解

    什么是GRPC 官网 gRPC gRPC 是一个现代开源高性能远程过程调用 RPC 框架 可以在任何环境中运行 它可以有效地连接数据中心内和跨数据中心的服务 并提供对负载平衡 跟踪 健康检查和身份验证的可插入支持 它还适用于分布式计算的最后
  • springmvc框架

    1 什么是MVC MVC就是一个分层架构模式 M即model模型是指模型表示业务规则 在MVC的三个部件中 模型拥有最多的处理任务 被模型返回的数据是中立的 模型与数据格式无关 这样一个模型能为多个视图提供数据 由于应用于模型的代码只需写一
  • 前端页面中展开和收起用同一按钮控制

    一 页面代码 a href style font size 16px color 0f82d6 展开 a div style display none id为该div的唯一标志 该div默认为 style display none 收起的
  • Saga分布式事务

    一 简介 与分布式事务TCC一样 目的都是为了在各个服务中正常使用事务 和TCC相比 Saga没有 预留 动作 操作都是直接提交到库 其中 每个Saga由一系列sub transaction Ti 组成 每个Ti 都有对应的补偿动作Ci 补
  • 上帝之眼Nmap(黑客工具)简介及命令大全

    目录 前言 一 Nmap简介 1 1 Nmap优点 1 2 Nmap四项基本功能 二 Nmap常用命令 2 1 主机发现 2 2 扫描技术 2 3 端口规格和扫描顺序 2 4 服务 版本探测 2 5 脚本扫描 2 6 操作系统检测 2 7
  • 95、Image Restoration with Mean-Reverting Stochastic Differential Equations

    简介 主页 https github com Algolzw image restoration sde 扩散模型终于在去噪 超分辨率等应用了 这是一种基于随机微分方程的通用图像恢复方法 关键结构包括均值还原SDE 该SDE将高质量图像转换
  • 机会转瞬即逝刷脸看准目标把握未来

    所有的企业家 不仅仅要考虑全球化让我受益 而是要让全球化变得更加普惠 让更多的人 更多的企业受益 鼓励并且帮助更多企业参与全球竞争 全球贸易 贸易战是为昨天而战或者为昨天的利益而战 我们今天要思考的 不是怎么去维护或者保护昨天 而是应该赢得
  • Java-获取时间戳、util.Date、sql.Date类的使用

    Java 获取时间戳 util Date sql Date类的使用 1 获取时间戳 获取系统当前时间 System类中的currentTimeMillis package com lmw time import org junit Test
  • 不定量表达法

    文章目录 1 some 一些 any 一些 most 大多数 every 每一个 all 所有的 2 both 两者都 either 两者之一 neither 两者都不 3 many 许多 much 许多 a lot of lots of
  • eclipse之 Type Hierachy:Viewing the type hierarchy

    1 Type Hierachy 继承关系层次图快捷键F4 2 show the type hierachy 子面板会根据选中的类显示对应的内容 show the supertype hierachy ctrl T 显示子类到父类的层次关系
  • Qt知识笔记(一)

    Qt知识笔记 一 Qt概述 Qt特点 Qt模块 Qt窗口类 坐标体系 相对坐标 垃圾回收机制 Qt概述 Qt是一个跨平台的 C 应用程序开发框架 具有短平快的优秀特质 投资少 周期短 见效快 效益高 几乎支持所有的平台 可用于桌面程序开发以