自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(58)
  • 收藏
  • 关注

原创 Qt——代码崩溃 free() invalid pointer

2. 这点就是我这里的错误原因: 如果单例被设计为在程序结束时通过其自己的逻辑来销毁,但在此之前所有的`QSharedPointer`都已经销毁并删除了该对象,那么当单例的析构逻辑再次尝试删除这个对象时,就会发生多重删除。在Qt中,`QSharedPointer` 是一个智能指针,它可以确保当不再有任何`QSharedPointer`指向一个对象时,该对象会被自动删除。如果用`QSharedPointer`来管理单例对象,那么当最后一个`QSharedPointer`被销毁时,单例对象也会被销毁。

2024-04-27 22:14:02 218

原创 Qt——实现添加子控件后,始终保证在布局低端添加

总共有两种办法,一种不断地删除布局,重新添加`addStretch()` ,另一种使用两个布局,一个主布局和一个次级布局。次级布局用于添加大部分小部件,而主布局则用于放置这个次级布局和 stretch。这样,你可以自由地向次级布局添加小部件,而无需每次都调整 stretch 的位置。在 Qt 中使用 `QVBoxLayout` 时,`addStretch()` 方法通常用于在布局中添加一个可伸缩的空间,这有助于推动没有固定空间要求的小部件向布局的顶部或底部移动。

2024-04-27 22:02:45 177

原创 Qt——置灰窗口

在这个示例中,我们创建了一个简单的Qt窗口,将一个`QLabel`放在窗口中心,并使用`QGraphicsOpacityEffect`将窗口置灰。然后,通过`setDisabled(true)`方法禁用窗口上的所有交互。这样,整个窗口及其子窗口都将被置灰且不可点击。在Qt中,你可以使用`QGraphicsEffect`来将一个窗口置灰化。同时,你可以通过设置`QGraphicsEffect`来禁用整个窗口上的所有交互。

2024-04-27 21:56:54 264

原创 Qt——字符串拼接汉化

在 Qt 中,字符串拼接与国际化(即字符串的翻译)是有一些复杂的关系的。尤其当你想把拼接的字符串进行翻译时,通常的 `tr()` 方法可能无法直接奏效,因为 `lupdate` 工具(用于提取可翻译字符串)可能不会正确解析动态拼接的字符串。需要确保使用 `tr()` 方法的类继承自 `QObject`,且正确使用 `Q_OBJECT` 宏,以便 `lupdate` 工具可以提取出需要翻译的字符串。在例子中,`%1`、`%2` 和 `%3` 是占位符,将在运行时被 `arg()` 方法替换。

2024-04-27 21:49:03 198

原创 Qt——实现滚动条添加小组件自动跳转到最后

为了使滚动区域在您添加新的控件后自动滑动到底部,显示新增的窗口,您可以利用 Qt 的 `QScrollArea` 的滚动条进行调整。在您的 `DWidget::toggleNewAdd` 函数中,添加窗口到布局后,可以通过调整滚动区的滚动条到最大值来实现这一点。如果您在添加控件后直接设置滚动条值,有时候可能由于布局更新的延迟,滚动条可能不会滚动到完全正确的位置。这样可以确保所有的布局和尺寸调整都已完成。1. 确保您有一个 `QScrollArea` 成员变量,并且它的中心控件已经设置好,以便添加新的控件。

2024-04-27 21:44:45 261

原创 Qt——设置字体颜色

【代码】Qt——设置字体颜色。

2024-04-27 21:41:15 56

原创 Qt——设置布局中特定的两个组件之间的间距

在垂直布局中,如果你设置了一个水平大小策略,那么它可能会影响布局中其他元素的宽度分布,尽管在大多数情况下,我们关心的是垂直间隔(`h`),而非宽度(`w`)。这个数字代表空间器的宽度。在垂直布局中,通常`h`(在我们的例子中是`spacerHeight`)和`vPolicy`参数更加重要,因为它们决定了垂直方向上的空间。请注意,`insertSpacing`方法只适用于`QBoxLayout`(`QHBoxLayout`和`QVBoxLayout`的基类),而不适用于所有类型的布局。

2024-04-24 22:13:25 777

原创 Qt——设置字体样式

在这个例子中,我们首先获取了按钮的调色板(`button.palette()`),然后我们使用`setColor`方法来设置`QPalette::ButtonText`(即按钮文字)的颜色。如果你想要将一个特定控件内所有文本的颜色设置为灰色,你可以将调色板设置到控件上。请注意,当你更改调色板时,你只是更改了控件的外观,并没有改变控件的字体属性。如果你还需要改变字体的其他属性(比如字体类型、大小),你需要使用`QFont`类,然后使用`QWidget::setFont`来设置。

2024-04-24 22:09:27 357

原创 Qt——QGridLayout

在Qt中,如果你想设置网格布局(`QGridLayout`)中单元格的比例,你需要使用`QGridLayout`的拉伸系数(stretch factors)来控制行和列的相对大小。你可以通过调用`setRowStretch`和`setColumnStretch`方法来实现。以下是一个简单的例子,展示了如何为一个两列的布局设置不同的比例。假设我们想要第一列是第二列宽度的两倍:、在上面的代码中,我们设置了第一列的拉伸系数为2,第二列的拉伸系数为1。这意味着第一列的宽度将是第二列的两倍。

2024-04-24 22:07:32 405

原创 qt——窗口置灰不可操作

虽然`setEnabled(false)`会自动让大多数控件看起来是灰色的,但有时你可能需要更明显的视觉效果,或者要自定义非标准控件的视觉表现。在Qt中实现一个窗口(或窗口中的特定部分)置灰并不可操作,通常涉及到两个概念:禁用窗口的交互功能以及视觉上的置灰效果。如果你希望整个窗口都不可交互,可以简单地使用`QWidget`的`setEnabled(false)`方法。这将禁用窗口及其所有子控件的交互能力。这段代码将在窗口的内容上绘制一个半透明的灰色矩形,从而给用户一种窗口被禁用的视觉印象。

2024-04-24 22:03:20 580

原创 Qt——Qt connect问题

此外,这里尝试两次修改并使用`value`,这在逻辑上也是有问题的,因为第一次`remove`调用已经改变了`value`。这个错误是由于在`connect`函数中的lambda表达式修改了一个以非`const`引用方式传递的参数,而该参数本应当是不可修改的。- 确保connect中的信号的参数类型与槽的参数类型完全匹配。- `data()`:这个方法返回存储在`QSharedPointer<DataInteraction>`中的`DataInteraction`对象的原始指针。

2024-04-24 22:00:22 396

原创 Qt——QString 只保留数字

在Qt 5之后的版本中,`QRegExp`已经被更现代和功能更强大的`QRegularExpression`所取代。在Qt中,如果你想从一个`QString`对象中只保留数字,可以使用`QString::remove()`函数结合一个正则表达式来实现。`[^0-9]`的意思是匹配任何不在`0-9`范围内的字符。- remove():`QString::remove()`函数接受一个`QRegExp`对象作为参数,并移除所有匹配该正则表达式的字符。

2024-04-24 21:48:30 340

原创 qt——设置ComBox的默认显示内容

在Qt中设置`QComboBox`的默认显示内容是一个常见的需求。有几种方法可以设置或更改`QComboBox`的默认显示项,包括在开始时选择一个特定的索引,或者显示一个提示性的文本作为默认内容。下面将分别介绍这些方法。

2024-04-24 21:44:03 427

原创 QT 实现时间的获取

2. 将时间转为时间戳,设置硬件时间。3. 将时间戳转为正常时间。1. 根据时区获取时间。

2024-04-18 21:50:18 429

原创 org.freedesktop.timedate1介绍

在 Linux 系统中,`org.freedesktop.timedate1` 是 `systemd` 的一部分,这是一个系统和服务管理器,提供了许多服务,包括时间和日期管理。`systemd` 提供的其他类似服务通常也是通过 D-Bus 接口进行交互,这些服务用于处理各种系统级任务。此处翻译自官方文档`timedatectl(1)` 是此服务的命令行客户端。`systemd-timedated` 目前提供以下四个设置的访问权限:- 系统时间- 系统时区。

2024-04-18 21:39:47 1083

原创 UTC和RTC 以及本机时间

在讨论操作系统和时间管理的上下文中,理解 UTC(协调世界时间)、RTC(实时时钟)以及本机时间(系统时间)之间的区别和联系非常重要。

2024-04-18 21:20:51 299 1

原创 Linux系统设置日期的几种方式

在 Linux 系统中,有多种方法和服务可以用来设置日期和时间。

2024-04-18 21:09:01 289

原创 xml文件修改后没有生成dbus接口

后来发现sudo make install 的时候,发现了警告信息,真的要注意警告信息,有些稀奇古怪的问题可能就是警告信息提示过的原因。在D-Bus上,信号可以传递数据(作为参数),也可以不传递数据,完全取决于你的设计需求。1. 编译文件没有更新,因为使用qt进行的构建,修改完后,直接运行,没有清除重新构建导致;2. xml文件编写错误,下面主要介绍xml文件错误的例子的解决方案。在 Qt D-Bus 中,对于数组或其他复杂类型,你需要通过。,在 D-Bus 类型系统中,元素时,其内部可以没有。

2024-04-18 20:47:29 221

原创 Qt——xml文件生成DBus接口

在 Qt 的 D-Bus 模块中,`QDBusAbstractAdaptor` 和 `QDBusAbstractInterface`是两个核心类,它们在 D-Bus 系统中扮演不同的角色,分别用于实现服务端适配器和客户端接口。1. 定义与用途:- `QDBusAbstractAdaptor` 类用于创建 D-Bus 适配器。这个适配器充当了 Qt 对象和 D-Bus 之间的桥梁。- 它通常用于将现有的 Qt 对象的功能公开为 D-Bus 服务,允许其他应用程序通过 D-Bus 调用这些功能。

2024-04-17 22:20:42 1194

原创 setAutoRelaySignals(true)

假设有一个 Qt 对象(比如 `TimeService`),它有一个信号 `timeChanged()`。- `TimeServiceAdaptor` 通过设置 `setAutoRelaySignals(true)` 自动将 `timeChanged` 信号转发到 D-Bus。- `TimeService` 类有一个 `timeChanged` 信号,该信号在时间更新时被触发。在 Qt 的 D-Bus 模块中使用 `QDBusAbstractAdaptor` 类时,方法 `` 扮演一个特别的角色。

2024-04-17 21:52:16 402

原创 面经(三)

`\d` 匹配任何数字,等同于 `[0-9]`。- `\D` 匹配任何非数字,等同于 `[^0-9]`。- `\w` 匹配任何字母数字字符,等同于 `[A-Za-z0-9_]`。- `\W` 匹配任何非字母数字字符,等同于 `[^A-Za-z0-9_]`。- `\s` 匹配任何空白字符,包括空格、制表符、换行符等。- `\S` 匹配任何非空白字符。

2024-03-14 10:55:20 856

原创 c++面经(二)

在上面的代码中,`std::move(ptr1)` 将 `ptr1` 转换为 `std::unique_ptr<int>&&` 类型(右值引用),这允许 `ptr2` 的构造函数接管 `ptr1` 指向的内存的所有权,随后 `ptr1` 将为空。在许多语言的标准库中(如C++的STL中的`map`、`multimap`、`set`和`multiset`),红黑树提供了底层的数据结构实现。这种特性让代码更加灵活和可扩展。`map` 中的每个元素都是一个包含键和值的对(`pair`),并且所有的键都是唯一的。

2024-03-14 10:22:06 777

原创 Qt 的d指针

其中,`Q_DECLARE_PRIVATE(MyClass)` 宏用于声明一些辅助函数,它使得在 MyClass 的成员函数中可以更容易地访问 d_ptr 指向的私有成员。d 指针的核心思想是将类的私有成员变量放到一个单独的内部类中,并在原类中保留一个指向这个内部类的指针。通过这种方式,当内部实现需要更改时,只需要更改内部类,而不必更改公有类的头文件。2. 编译器耦合减少:由于私有成员的定义被移到了源文件中,改变私有成员不会触发依赖于相应头文件的代码重新编译。这种技术在 Qt 库中被广泛应用。

2024-03-14 09:42:37 667

原创 c++面经

c++中static的作用-CSDN博客。

2024-03-13 09:22:03 1057

原创 类模板和函数模板

在 C++ 中,类模板和函数模板是用来创建通用类型的模板,允许在编写代码时将类型参数化。这种泛型编程方式可以帮助我们编写更通用、更灵活的代码,提高代码的重用性和可维护性。

2024-03-11 19:35:45 439

原创 c++中static的作用

请注意,静态成员函数在设计类时应该根据需要小心使用。:静态成员函数无法直接访问类的非静态成员变量或非静态成员函数。常见的用途包括实现与类相关但不依赖于类实例的功能,管理共享状态或数据,以及在类外部访问类的成员。静态成员函数可以访问类的静态成员变量,这使得静态成员函数可以用来操作共享的数据。:静态成员函数不依赖于任何特定的类实例,因此可以在没有创建类对象的情况下调用。静态成员函数在命名空间上提供了一定程度的隔离,因为它们不依赖于特定对象的状态。:静态成员函数可以直接通过类名调用,而不需要创建类的对象。

2024-03-11 19:09:08 413

原创 Qt的信号槽机制

在开始讲信号槽之前,我们先了解下Qt的框架的核心组成部分,Qt的元对象编译器(MOC)和元对象系统是Qt框架的核心组成部分,它们使得Qt拥有了信号与槽机制、反射(introspection)和属性系统等强大的特性。

2024-03-11 18:57:34 1590

原创 快速排序代码

在这个实现中,`quickSortRecursive`函数实现了快速排序的递归过程。它首先选择一个基准值(这里选择第一个元素),然后重新排列数组,使得左侧的元素都比基准值小,右侧的元素都比基准值大。请注意,快速排序在最坏情况下的时间复杂度是O(n^2),但是平均情况下的时间复杂度是O(n log n)。`quickSort`函数是一个公共接口,它调用`quickSortRecursive`开始排序过程。主函数`main`展示了如何使用`quickSort`函数对一个整数数组进行排序,并输出排序后的结果。

2024-03-11 16:21:01 319

原创 一个长度为N的整形数组,数组中每个元素的取值范围是[0,n-1],判断该数组否有重复的数

如果在尝试放置过程中发现目标位置上的元素和要放置的元素相同,则表示发现了重复的元素,函数就会返回`true`。这意味着如果数组中没有重复的元素,那么每个元素应该正好与它的索引相同。要判断一个长度为N的整形数组中是否有重复的数字,其中元素的取值范围是[0, n-1],可以采用直接的哈希表方法,或者因为数字范围有限制,也可以原地修改数组来节省额外的空间。这个方法不需要额外的空间,并且时间复杂度是O(n),因为每个元素最多只会被交换两次(一次是被放到它应该在的位置上,另一次是放别的元素到它应该在的位置上)。

2024-03-11 16:19:42 447

原创 工厂模式~

在这个抽象工厂模式的示例中,`GUIFactory` 是一个可以创建按钮和窗口的抽象工厂。你可以把“工厂方法”想象成是快餐店里的一个单品菜单(比如只卖汉堡的菜单),而“抽象工厂”则像是套餐菜单,套餐里包含了多个不同的食品(比如汉堡、薯条和可乐)。- 使用**抽象工厂**:你会创建一个工厂,这个工厂能够创建所有需要的UI元素(按钮、窗口),并且这些元素在不同操作系统中有不同的实现。- 使用**工厂方法**:你会为每种元素(按钮、窗口)创建一个工厂,每个工厂负责创建在不同操作系统中该元素的具体实例。

2024-03-10 18:48:39 892

原创 shared_ptr的安全性

你可以试图通过调用`lock()`方法来将`weak_ptr`提升为`shared_ptr`,如果所监视的对象还活着(即引用计数大于0),`lock()`会成功返回一个有效的`shared_ptr`,否则返回一个空的`shared_ptr`。4. 将 `a` 赋值给 `b->a_ptr`,但由于 `b->a_ptr` 是 `std::weak_ptr`,它并不增加 `A` 实例的引用计数,所以 `A` 的引用计数仍然是1。使用`weak_ptr`可以避免这种情况,因为`weak_ptr`不增加引用计数。

2024-03-10 12:19:29 957

原创 push_back 和emplace_back区别

push_back`和`emplace_back`是C++标准模板库(STL)中`std::vector`容器的成员函数,它们都用于在向量的末尾添加一个元素。在这个例子中,当使用`push_back`时,首先会调用`MyClass`的构造函数来创建一个临时对象,然后这个临时对象会被移动到向量中(如果支持移动语义)。而当使用`emplace_back`时,将直接在`std::vector`的内部存储空间中调用`MyClass`的构造函数,这个过程中不会创建临时对象,也就没有不必要的拷贝或移动操作。

2024-03-10 11:23:33 371

原创 虚函数表里存放的内容是什么时候写进去的?

当创建某个类的对象时,对象的构造函数会设置该对象中虚指针(vptr)的值,使其指向类的vtable。如果这个对象是基类类型的一部分(比如作为派生类的基类子对象),那么在构造基类部分时,它的vptr会先被设置指向基类的vtable,之后在派生类构造函数中可能会被更新为指向派生类的vtable。如果类B继承了类A,并且覆盖了一些虚函数,编译器会为B创建一个新的vtable,其中覆盖的虚函数指向B中的实现,而未覆盖的虚函数则指向A中的实现。虚函数表(vtable)里的内容是在。的,并且在程序启动时,即程序的。

2024-03-09 12:03:09 342

原创 返回值优化(RVO)和命名返回值优化(NRVO)

在这个例子中,如果编译器应用了RVO,那么`MyClass`类型的对象将直接在`obj`的存储位置被构造,而不是首先在`createMyClass`的局部作用域内构造然后复制或移动到`obj`。这个对象将直接在`main`函数中的`obj`变量的位置被构造,而不是先在`createMyClass`函数中构造然后再拷贝或移动到`obj`。如果编译器应用了NRVO,`result`对象会直接在`obj`的位置被构造,而不是先在函数`createMyClass`中构造然后复制或移动。这通常发生在返回临时对象时。

2024-03-09 11:05:38 1146

原创 c++ 类内可以定义引用数据成员吗?

在这个例子中,`MyClass`类包含一个对`int`类型的引用`myRef`作为其数据成员。在`main()`函数中,我们创建了一个名为`obj`的`MyClass`对象,并将整数`value`的引用传递给它。在C++中,类内是可以定义引用数据成员的,但是在初始化对象时,必须在构造函数的成员初始化列表中对引用进行初始化,因为引用必须在创建时被初始化,并且不能在其生存期内引用不同的对象。

2024-03-09 10:39:00 526

原创 拷贝构造函数和移动构造函数

从C++11开始,可以使用`= default;`和`= delete;`来显式地要求编译器默认生成或禁用这些函数。

2024-03-07 10:49:27 1104

原创 进程、线程、协程第一弹 —— 概念

进程是操作系统中的一个基本概念,它代表系统中运行的一个程序的实例。每个进程有自己独立的内存空间,包括代码段、数据段、堆栈等,进程之间通常是相互独立的。进程间的通信需要通过特定的机制来实现,比如管道、消息队列、共享内存等。协程是一种轻量级的线程,它在程序中是由程序员控制的,而不是由操作系统控制。相比于线程,协程的切换开销更小,通常用于实现高效的并发编程。线程之间可以通过共享内存等机制进行通信,线程的切换开销相对于进程来说较小,因此多线程编程通常比多进程编程更高效。线程是进程中的一个执行单元,

2024-03-06 18:21:41 344

原创 const 的作用

在C++中,`const`变量一经定义必须立即初始化,因为之后你将无法修改它们的值。这是因为`const`关键字用于定义常量值,这意味着该值在编译时就应该是已知的,并且在程序的整个生命周期中不会改变。// 正确:const变量在定义时初始化// 错误:未初始化的const变量// 错误:不能给const变量赋值编译器会报错,因为`myConst`被定义为`const`但没有被初始化。一旦定义了`const`变量,就不能再给它赋值,因为`const`本意就是表明该变量的值在定义后不可变。此外,

2024-03-06 18:06:10 894

原创 c++内存泄漏

因此,栈内存通常不会发生内存泄漏,因为一旦函数返回,栈上的内存就会自动释放。在使用动态内存分配(如C/C++中的`malloc`/`new`)时,程序员有责任在不再需要分配的内存时释放它(使用`free`/`delete`)。上动态分配的内存没有被适当释放,导致程序失去了对这些内存块的引用,使得这些内存即使不再需要,也无法被操作系统回收。内存泄漏存在多方面的因素,但大多数内存泄漏通常是因为程序错误或疏忽造成的,归纳总结后,存在以下几种(只是博主的理解,如果发现有缺失的部分,欢迎纠正)

2024-03-05 15:54:58 1041 1

原创 c++继承

本文旨在记录,继承的作用和继承后成员函数和变量的访问权限等问题。继承是面向对象编程的一个基本概念,继承支持代码的复用,能够建立一种层级关系,使得可以在现有类的基础上创建新类,同时保留原类的特性。:当一个类以方式继承另一个类时,的和的访问属性在派生类中。基类的被派生类访问,但可以通过的公有和保护成员函数来访问。:当一个类以 protected 方式继承另一个类时,:当一个类以 private 方式继承另一个类时,基类的公有和保护成员在派生类中都成为私有成员。

2024-03-05 15:31:42 441 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除