- 博客(122)
- 资源 (6)
- 收藏
- 关注
原创 【QT】隐式共享
Qt 中许多 C++ 类使用隐式数据共享来最大程度地利用资源并最小化复制。隐式共享类在作为参数传递时既安全又高效,因为只传递数据的指针,只有在函数写入数据时才会复制数据,即*写时复制*。
2024-05-21 20:12:54 870
原创 【QT】资源系统
Qt资源系统是一种跨平台的机制,用于将二进制文件存储在应用程序的可执行文件中。如果您的应用程序始终需要一定的文件集(如图标、翻译文件等),并且不希望丢失这些文件,这将非常有用。资源系统基于qmake(Qt的构建工具)、rcc(Qt的资源编译器)和QFile之间的紧密协作。
2024-05-21 19:53:37 1040
原创 【QT】多语言
应用程序的*国际化*和*本地化*是将应用程序适应不同语言、地区差异和目标市场技术要求的过程。国际化是指设计一个软件应用,使其可以在不进行工程修改的情况下适应各种语言和地区。 本地化是指通过添加特定区域或语言的组件(如日期、时间和数字格式)并翻译文本来使国际化的软件适应特定地区或语言。
2024-05-21 08:52:16 852
原创 【QT】容器类
Qt 库提供了一组通用的基于模板的容器类。这些类可以用于存储指定类型的项目。例如,如果需要一个可调整大小的 QString 数组,可以使用 QVector。这些容器类设计得比 STL 容器更轻量、更安全且更易于使用。如果你不熟悉 STL,或者更喜欢“Qt 方式”的做法,可以使用这些类代替 STL 类。容器类是隐式共享的,它们是可重入的,并且经过优化以达到快速、低内存消耗和最小的内联代码扩展,从而生成更小的可执行文件。此外,在所有线程都将它们用作只读容器的情况下,它们是线程安全的。
2024-05-21 08:35:01 1024
原创 【QT】会话管理
一个*会话*是指一组正在运行的应用程序,每个应用程序都有特定的状态。会话由一个名为*会话管理器*的服务控制。参与会话的应用程序称为*会话客户端*。
2024-05-20 14:22:17 1082
原创 【QT】线程支持
Qt 提供了跨平台的线程类、线程安全的事件发布方式以及跨线程的信号-槽连接。这使得开发可移植的多线程 Qt 应用程序以及利用多处理器机器变得容易。多线程编程也是执行耗时操作而不冻结应用程序用户界面的有用范式。Qt 的早期版本提供了构建不支持线程的库的选项。从 Qt 4.0 开始,线程功能始终启用。
2024-05-17 09:13:33 330
原创 【QT】线程基础
线程是关于并行执行任务的,就像进程一样。那么线程与进程有何不同呢?当你在电子表格上做计算的同时,可能还有一个媒体播放器在桌面上播放你喜欢的歌曲。以下是两个进程并行工作的示例:一个运行电子表格程序;一个运行媒体播放器。多任务处理就是这个概念的一个典型表述。进一步观察媒体播放器,你会发现在一个单一进程内也存在并行执行的情况。当媒体播放器向音频驱动程序发送音乐时,用户界面及其所有功能也在不断更新。这就是线程的作用——在一个单一进程内实现并发。那么并发是如何实现的呢?
2024-05-17 09:13:00 370
原创 【QT】线程同步
尽管线程的目的是允许代码并行运行,但有时线程必须停下来等待其他线程。例如,如果两个线程尝试同时写入同一变量,结果是不确定的。强制线程彼此等待的原则称为互斥。这是一种保护共享资源(如数据)的常见技术。Qt 提供了低级别的原始机制以及高级别的线程同步机制。
2024-05-17 09:12:14 240
原创 【QT】线程和QObject
QThread 继承自 QObject。它会发射信号来指示线程开始或结束执行,并且也提供了一些槽函数。更有趣的是,QObject 可以在多个线程中使用,发射信号以调用其他线程中的槽函数,并向在其他线程中"活动"的对象发送事件。这是因为每个线程都可以拥有自己的事件循环。
2024-05-17 09:11:21 535
原创 【QT】可重入性与线程安全性
在文档中,术语可重入和线程安全用于标记类和函数,以指示它们在多线程应用程序中的使用方式:线程安全可重入因此,线程安全的函数始终是可重入的,但可重入的函数并不总是线程安全的。延伸来说,如果一个类的成员函数可以安全地从多个线程调用,只要每个线程使用该类的不同实例,那么该类被称为可重入。如果一个类的成员函数可以安全地从多个线程调用,即使所有线程使用该类的相同实例,那么该类被称为线程安全。Qt 类仅在打算供多个线程使用时被记录为线程安全。
2024-05-17 09:10:21 342
原创 【QT】Qt模块中的线程支持
在线程之间共享隐式共享类的实例时应使用适当的锁定。但是,原子引用计数确保了在其自己的、本地隐式共享类实例上工作的线程的安全性。换句话说,如果每个线程都在不同的 QImage 上绘制,则两个线程可以同时绘制,但两个线程不能同时在同一 QImage 上绘制。在许多人看来,隐式共享和多线程是不兼容的概念,这是因为引用计数通常是如何完成的。然而,Qt 使用原子引用计数来确保共享数据的完整性,避免引用计数的潜在破坏。即使在多线程应用程序中,您也可以安全地将它们用作普通的、非共享的、可重入的基于值的类。
2024-05-17 09:08:34 268
原创 【QT】对象树与所有权
QObjects自行组织成对象树。当您创建一个带有另一个对象作为父对象的QObject时,它将被添加到父对象的children()列表中,并在父对象被删除时被删除。事实证明,这种方法非常适合GUI对象。例如,一个QShortcut(键盘快捷键)是相关窗口的子对象,因此当用户关闭该窗口时,快捷键也会被删除。
2024-05-16 17:45:21 389
原创 【QT】计时器
如果你已经有一个 QObject 子类并且想要进行简单的优化,你可以使用 QBasicTimer 而不是 QTimer。使用 QBasicTimer,你必须在 QObject 子类中重新实现 timerEvent() 并在那里处理超时。"摇摆"示例展示了如何使用 QBasicTimer。
2024-05-16 17:20:40 853
原创 【QT】状态机框架
状态图提供了一种图形化建模系统对刺激的反应方式。这是通过定义系统可能处于的 *状态*,以及系统如何从一个状态转移到另一个状态(*状态之间的转换*)来实现的。事件驱动系统(如Qt应用程序)的一个关键特征是行为往往不仅取决于最后或当前事件,还取决于先前的事件。使用状态图,可以轻松表达这些信息。
2024-05-16 17:18:56 962
原创 【QT】事件系统
在 Qt 中,事件是对象,派生自抽象的 QEvent 类,代表了在应用程序内部发生的事情,或者是应用程序需要知道的外部活动的结果。事件可以被任何 QObject 子类的实例接收和处理,但它们特别适用于小部件。本文档描述了在典型应用程序中如何传递和处理事件。
2024-05-15 20:54:30 507
原创 【QT】属性系统
Qt提供了一套类似于某些编译器供应商提供的复杂属性系统。然而,作为一个与编译器和平台无关的库,Qt 不依赖于非标准的编译器特性,比如 `__property` 或 `[property]`。Qt 的解决方案可以在 Qt 支持的每个平台上与 *任何* 标准C++编译器一起使用。它基于元对象系统,该系统还通过信号和槽提供了对象间的通信。
2024-05-15 20:47:55 788
原创 【QT】信号&槽
信号和槽被用于对象之间的通信。信号和槽机制是 Qt 的一个核心特性,也许是与其他框架提供的功能最不同的部分。信号和槽是通过 Qt 的**元对象系统**实现的。
2024-05-15 20:35:04 630
原创 【TQ】对象模型
标准 C++ 对象模型为对象范式提供了非常高效的运行时支持。但是,在某些问题域中,它的静态特性不够灵活。图形用户界面编程是一个需要运行时效率和高度灵活性的领域。Qt通过将C++的速度与Qt对象模型的灵活性相结合,提供了这一点。
2024-05-15 20:08:20 446
原创 【QT】基于字符串的连接和基于函数的连接之间的差异
从Qt 5.0起,Qt提供了两种不同的C++信号槽连接方式:基于字符串的连接语法(SIGNAL/SLOT将信号/槽转成一个字符串)和基于函数的连接语法。这两种语法各有优缺点。下表总结了它们之间的区别。
2024-05-15 09:15:33 261
原创 【Qt】信号&槽
信号和槽被用于对象之间的通信。信号和槽机制是 Qt 的一个核心特性,也许是与其他框架提供的功能最不同的部分。信号和槽是通过 Qt 的元对象系统实现的。
2024-05-13 20:06:02 997
原创 【C++】std::chrono
提供了一种类型安全的方式来处理日期和时间,它是 C++11 引入的一个重要特性。通过使用持续时间和时间点,我们可以轻松地执行时间计算和操作,从而更加方便地处理时间相关的任务。
2024-05-07 14:07:57 483
原创 【C++】std::condition_variable
是 C++ 并发编程中重要的同步原语之一,用于线程间的通信和同步。通过合理地使用,可以有效地实现多线程之间的协调和同步,提高程序的并发性能和可靠性。
2024-05-07 13:31:49 522
原创 【C++】std::atomic
是 C++ 标准库提供的一个模板类,用于实现原子操作。原子操作是指不可中断的操作,要么全部执行成功,要么全部不执行,不会出现部分执行的情况。可以用于在多线程环境下对共享变量进行安全的原子操作。
2024-05-06 13:51:24 655 2
原创 【C++】std::array
std::array是 C++ 标准库提供的一个容器类,用于存储固定大小的数组。与传统的 C 语言数组相比,std::array提供了更多的功能和安全性,是 C++ 中常用的容器之一。
2024-05-06 13:45:37 895
原创 【C++】std::weak_ptr
是C++标准库中的智能指针,用于解决的循环引用问题。它是一种弱引用智能指针,不会增加所指向对象的引用计数,也不会影响对象的生命周期,但可以观测到所指向对象的生命周期状态。因此,它经常与一起使用,用于解决共享对象的所有权问题。
2024-05-06 13:28:22 697
原创 【C++】std::unique_ptr
`std::unique_ptr`是C++中管理动态内存的首选智能指针,它提供了独占式拥有和自动释放资源的能力,能够有效地避免内存泄漏和资源浪费。通过深入理解`std::unique_ptr`的基本概念、内部原理、应用场景和使用技巧,并结合实际的案例分析,可以更好地掌握和应用这一强大的工具,提高程序的健壮性和性能。
2024-05-06 13:24:50 977
原创 【C++】std::shared_ptr
是C++标准库提供的一种智能指针,用于共享式拥有资源。它可以共享资源的所有权,确保资源在最后一个引用被销毁时自动释放。采用引用计数的方式管理资源,每个对象都会维护一个引用计数,记录有多少个对象共享了相同的资源。
2024-05-06 13:18:06 768
原创 【C++】std::bind与std::function区别
用途不同std::bind主要用于绑定函数和参数,生成一个新的可调用对象;用于封装可调用对象,提供统一的调用接口。返回值不同std::bind返回一个函数对象,类型由绑定的参数决定;是一个类模板,可以包装各种类型的可调用对象。适用范围不同std::bind通常用于延迟调用、参数重排、成员函数绑定等;用于传递可调用对象、存储函数对象、作为函数参数等。总的来说,std::bind用于创建一个新的函数对象,用于封装和存储各种类型的可调用对象。
2024-05-06 11:58:19 308
原创 【C++】std::bind
std::bind是一个函数模板,用于将可调用对象(函数、函数指针、成员函数、函数对象等)与其参数进行绑定,生成一个新的可调用对象。绑定后的可调用对象可以延迟调用、传递给其他函数或存储在数据结构中。
2024-05-06 10:22:35 1386
原创 【C++】std::function
是一个函数封装器,可以将任何可调用对象(如函数、函数指针、Lambda表达式、成员函数指针等)包装成一个可调用对象,从而实现对各种类型可调用对象的统一管理和操作。的内部原理主要依赖于模板和多态。它通过模板参数推导和类型擦除的技术,将各种类型的可调用对象转换成一个通用的内部结构体对象,从而实现了对可调用对象的统一封装和管理。在实际开发中的广泛应用,从简单的函数封装到实现观察者模式和函数调度器等功能。,我们可以实现函数的动态调用、统一管理和灵活传递,提高代码的可读性和可维护性。
2024-05-06 09:51:38 563
原创 【C++】独占互斥锁(unique_lock)
通过学习和掌握 C++ 中的 unique_lock,可以更灵活地管理互斥锁,实现更复杂的线程同步机制,提高代码的可读性和可维护性。
2024-05-05 08:44:38 847
原创 【C++】锁卫士(lock_guard)
通过学习和掌握 C++ 中的 lock_guard,可以更加方便地管理互斥锁,确保共享资源的安全访问,并提高代码的可读性和可维护性。
2024-05-04 11:09:16 967
原创 【C++】递归互斥锁(recursive_mutex)
通过学习和掌握 C++ 中的递归互斥锁(recursive_mutex),可以更好地处理递归调用和多层嵌套函数中的线程安全问题,确保程序的正确性和稳定性。
2024-05-04 11:07:08 960
基于Qt4的软键盘[源码]
2020-07-07
PLC编程手册(FX系列).zip
2019-05-16
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人