自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Kwin代码阅读——模板类

这一行开始定义模板类`EffectLoadQueue`。

2024-09-30 15:28:39 1083

原创 函数模板说明

类模板:模板参数在实例化类时指定,并且可以在整个类的范围内使用。函数模板:模板参数在调用函数时由编译器推导或者显式指定。这两种模板机制使得C++具有高度的泛型编程能力,允许编写类型安全且复用性强的代码。

2024-09-30 15:07:12 251

原创 blockSignals(true)

当使用`blockSignals(true)`时,所有被阻塞的对象在此期间产生的信号都不会被发送出去。具体来说,`blockSignals(true)`会临时屏蔽该对象的所有信号,直到调用`blockSignals(false)`为止。在这段时间内,任何信号的产生都不会触发连接的槽函数。

2024-09-27 10:13:05 436

原创 阻塞信号(`blockSignals(true)`)的作用

这在处理用户界面组件(如滑块、滚动条)时尤为重要,因为这些组件的值变化通常会触发信号,而这些信号可能会引发一系列的回调和处理逻辑,导致一些意外行为或性能问题。在上述代码中,如果不阻止信号,`model->setOpacity` 会触发 `opacityChanged` 信号,进而调用更新滑块值的函数,滑块值的改变又会触发 `valueChanged` 信号,导致模型更新,再次触发信号,形成无限循环。例如,更新滑块值的同时可能会触发其他UI组件的更新,这些组件的状态改变又会影响滑块,形成复杂的依赖关系。

2024-09-27 10:05:08 341

原创 Qt::WA_TranslucentBackground

即便混成关闭,设置 `Qt::WA_TranslucentBackground` 后,Qt会通过调整窗口的绘制请求来优化X11的重绘过程,减少了可能的残影现象。- 没有设置透明背景时,Qt会向X11发出绘制请求,但这些请求可能不会触发对窗口背景的重新绘制,因为X11并不需要“清空”旧的背景内容,只需绘制新内容。它通过调用X11的API来请求重绘、移动窗口等操作,但实际的渲染是由X11来完成的。当混成关闭时,窗口的绘制通常是由X11或其他窗口系统(如Wayland)来处理,而不是Qt直接绘制。

2024-09-25 13:43:47 491

原创 DBus调用设置属性

在 Qt 中调用 D-Bus 获取和设置属性可以使用 QDBusInterface 和 QDBusReply。确保 D-Bus 服务已运行并且正确配置了接口和属性名。你可以根据具体的 D-Bus 服务和接口调整参数。

2024-09-19 13:16:26 117

原创 DBUS属性原理

NOTIFY 本身并不会自动发射信号,它只是将信号与属性的变化关联起来,以便 Qt 的元对象系统知道应该监听哪个信号。当客户端请求设置属性时,DBus 框架会调用对象的 setter 方法(通常是 setPropertyName(value)),将新值传递给它。属性可以是只读、只写或读写的。如果 transparencyState 属性的值发生变化,transparencyStateChanged 信号会被发射,通知客户端属性已经更新。DBus 属性的设置和读取原理主要围绕两个概念:属性的访问和方法调用。

2024-09-19 13:14:15 844

原创 类图之间的关系

例如,一个类A的方法中创建了类B的实例,并调用了它的方法,那么A就依赖于B。这种联系可以是单向的,也可以是双向的。组合也是关联的一种特殊形式,同样表示一种“拥有”关系,但这种“拥有”关系更强,表示整体与部分之间是不可分的,部分不能离开整体而独立存在。聚合是关联的一种特殊形式,表示一种“拥有”关系,但这种“拥有”是整体与部分的关系,且部分可以离开整体而独立存在。在面向对象编程(OOP)中,当一个类调用另一个类的实例或接口时,这涉及到几种不同的关系,主要取决于是如何调用的以及调用的是实例还是接口。

2024-09-14 09:18:20 220

原创 kwin模糊度代码解读

本篇文档主要讲述kwin绘制模糊特效的流程,和相关函数的理解注释。

2024-09-12 16:58:51 495

原创 CPU 占比过高,查看影响的函数

此文档使用gprof 的方式检查项目中是哪部分函数导致 CPU 占比过高,但是也有一些局限性。例如,它不能分析多线程程序的性能。因此,在实际应用中,可以结合其他性能分析工具(如。gprof,可以通过添加编译器和链接器选项来启用 gprof 支持;Valgrind、perf等)一起使用,以获取更全面的性能数据。

2024-09-12 16:12:19 207

原创 代码学习——namspace handle()

通过将 `findWindow()` 函数放入一个匿名 `namespace`(也称为“内部链接”),可以确保该函数只能在当前编译单元(即当前 `.cpp` 文件)中访问,避免与其他文件中的同名函数冲突。`handle()` 函数返回的 `QPlatformWindow` 对象允许访问底层窗口系统的窗口,比如在 X11、Windows、或 Wayland 中,该句柄会映射到系统中与窗口相关的结构体或 ID(如 `HWND`、`Window ID` 等)。这在模块化编程中很有用,防止不必要的全局访问。

2024-09-11 11:18:13 477

原创 qApp->allWindows()

如果某个窗口不属于当前应用程序(例如是其他应用程序的窗口,或者是通过系统级 API 创建的非 Qt 窗口),那么 qApp->allWindows() 无法获取到这些窗口。qApp->allWindows() 的实现原理是基于 Qt 内部维护的一个窗口列表,该列表会自动追踪当前 QApplication 中创建和管理的所有顶级窗口。如果一个窗口是另一个窗口的子窗口,那么它不会单独出现在 allWindows() 列表中,因为它被认为是父窗口的一部分。

2024-09-11 10:53:17 358

原创 qt Qt设计师和自定义代码布局结合

要将 Qt Designer 生成的 UI 布局与代码中自定义的布局结合起来,你可以使用一个占位符(如 QWidget或 QVBoxLayout),然后将 Designer 生成的布局插入到这个占位符中。将 Designer 生成的 UI 嵌入到自定义的布局中。2. 在代码中使用 setupUi() 方法初始化 Qt Designer 生成的 UI,然后将它嵌入到你的自定义布局中。1. 首先,在 Qt Designer 中设计你的界面,并确保你有一个占位符(例如 QWidget)来插入自定义的布局。

2024-07-19 10:54:16 364

原创 policyKit 依赖解决

找不到 polkit-agent-1 包的错误通常表示该包未安装在系统上。

2024-07-18 17:26:20 331

原创 rf-session如何设置的环境变量(语言环境)

会调用不同的函数读取配置文件,开始配置当前用户设置的内容;会将读取到的语言设置应用到系统环境变量中,如。这部分可能是初始化系统(如。读取到的每一个环境变量,通过调用。,将语言设置应用到用户会话环境中。,该文件通常由安装程序通过。Main 函数内,创建。的构造函数最后,调用。

2024-07-15 11:16:31 309

原创 注销和重启的区别是什么

终止当前用户的会话。- 操作系统和后台服务继续运行。- 用户可以立即重新登录或切换到其他用户。- 终止所有用户会话和系统进程。- 完全关闭并重新启动操作系统。- 重置系统状态,重新加载操作系统和所有服务。这两者在操作和结果上有显著的区别,选择哪种操作取决于用户的具体需求和目的。

2024-07-12 10:00:25 792

原创 为什么session bus 注销后会重启,但是system dbus不会呢

D-Bus 有两种主要的总线:系统总线(system bus)和会话总线(session bus)。因此,会话总线在用户注销后会终止并在重新登录时重启,因为它是用户会话范围内的实例。而系统总线则始终运行,不会因用户注销而停止,因为它是整个系统范围内的服务。因此,用户注销后会话总线会停止,而重新登录后会重新启动。- 即使用户注销,系统总线依然保持运行,因为它服务于系统范围内的服务和进程,而不仅仅是单一用户的会话。- 当用户注销时,该会话总线实例会随之终止,因为它的生命周期与用户会话紧密绑定。

2024-07-12 09:58:27 291

原创 linux监听系统文件(一)——命令篇

在Linux系统中,查看启动进程的顺序和监听某一个文件被读取或调用通常需要使用不同的工具和方法。

2024-07-09 21:43:09 901

原创 Linux监听系统文件(二)——auditd

使用auditd可以记录文件的修改操作,博主采用的就是这种,下面是实例。首先,安装auditd然后,添加一个监控规则来监控这是auditd生成的审计日志输出,描述了之前设置的审计规则被添加的事件。让我们逐步解释每一部分的含义:这些日志条目表明你成功添加了一条审计规则来监视`/etc/locale.conf`文件的更改。接下来,审计日志将记录对这个文件的所有访问和更改。

2024-07-09 21:37:32 267

原创 Linux监听系统文件(四)——日志输出

之前在。

2024-07-09 21:25:39 459

原创 Linux监听系统文件(三)——重启后自动监听

前面的命令只能在系统启动的过程中监听,本篇介绍重启后自动监听,为了在系统重启后自动开始监听文件,你可以将监听命令设置为系统启动时自动执行。

2024-07-09 21:17:34 346

原创 Kwineffect 毛玻璃绘制圆角

填充多边形可能是一个由多个线段组成的区域,而 toPolygon() 方法会将这个复杂的填充多边形简化为一个更简单的多边形,即多边形的边界由更少的线段组成,以便更容易处理或绘制。具体来说,this 在这里表示当前对象的指针,contentsRect() 是该对象的一个成员函数,用于获取内容区域的大小。设置遮罩后,窗口将只显示遮罩区域内的内容,遮罩区域外的内容将被隐藏。综合起来,这两个方法的组合操作在这段代码中可能是为了将复杂的绘图路径对象转换为一个更简单的多边形,以便后续的区域操作或绘图操作。

2024-07-09 21:09:48 384

原创 mock(三)--rootdir作用

-rootdir=/home/g/build 选项用于指定 mock 工具的操作根目录。具体来说,它定义了 mock 的 chroot 环境所在的根目录。这个选项告诉 mock 在 /home/g/build 目录中创建和维护 chroot 环境。所有的构建操作都会在这个独立的目录中进行,从而实现与宿主系统的隔离。这样可以避免宿主系统的配置和依赖对构建过程的影响。默认情况下,mock 会在其标准位置(通常是 /var/lib/mock)创建 chroot 环境。

2024-07-01 20:28:13 304

原创 mock(二)宿主机的源码拷贝到 mock 的 chroot 环境

将宿主机的源码拷贝到 mock 的 chroot 环境中,你可以使用 --copyin 选项。此选项允许你将宿主机上的文件或目录复制到 mock 的 chroot 环境中的指定位置。首先,确保你已经初始化了 chroot 环境。使用 mock 命令的 --copyin 选项将宿主机的源码目录复制到 chroot 环境中。这将会把宿主机上的 /home/user/project 目录复制到 mock 的 chroot 环境中的 /builddir/project 目录中。

2024-07-01 20:26:05 284

原创 mock(一)

mock 是一个用于在隔离的环境中构建 RPM 包的工具。它使用 chroot 环境来确保构建过程与主机系统隔离,从而避免主机系统上的配置和依赖影响构建结果。

2024-07-01 20:23:31 455

原创 %prep 部分的作用

在 %prep 部分,%setup -q 用于解压缩源码包并进入解压后的目录,而 %patch0 -p1 用于应用指定的补丁文件。通过这些步骤,可以在构建 RPM 包之前自动化处理源码的准备工作,确保所有必要的修改已经应用。

2024-06-27 14:19:23 261

原创 `QDBusConnection` 和 `QDBusInterface`区别

`QDBusConnection` 是用来管理和维护与 D-Bus 的连接,并处理消息的发送和接收。- `QDBusInterface` 是用于与 D-Bus 上的远程对象进行交互,调用其方法和连接其信号。这两个类通常一起使用,先通过 `QDBusConnection` 连接到 D-Bus,然后通过 `QDBusInterface` 进行具体的远程调用和信号连接。

2024-06-22 14:18:21 314

原创 LANG、LC_MESSAGES和LC_ALL

在Linux系统中,环境变量LANG、LC_MESSAGES和LC_ALL用于控制系统和应用程序的语言和区域设置(locale)。

2024-06-22 11:13:44 395

原创 GSettings(五)——没有图形界面的环境,调用gsettings

在没有图形界面的环境或以root用户运行时,确保D-Bus会话正确初始化是关键。使用dbus-launch启动会话,或者确保正确设置DBUS_SESSION_BUS_ADDRESS环境变量,可以解决大部分相关问题。

2024-06-22 11:10:58 366

原创 GSettings(四)——dconf-WARNING: failed to commit changes to dconf: Cannot autolaunch D-Bus without X11

通过确保正确设置 DBUS_SESSION_BUS_ADDRESS 环境变量,或者使用 dbus-launch 启动 D-Bus 会话,你可以避免 dconf-WARNING: failed to commit changes to dconf: Cannot autolaunch D-Bus without X11 $DISPLAY 错误。在图形界面环境下运行或正确转发 X11 也是解决此问题的有效方法。

2024-06-22 11:07:53 1450

原创 GSettings(三)——GSettings底层原理

GSettings 通过 GObject 库与 D-Bus 进行通信,将配置请求发送到 DConf 后端,由 DConf 后端实际存储和管理配置数据。这种设计使得 GSettings 成为一个高效且灵活的配置管理系统,广泛应用于 GNOME 桌面环境及其他依赖 GSettings 的应用程序。

2024-06-22 11:04:35 530

原创 GSettings(二)——GSettings原理说明

GSettings 和 DConf 的设计允许不同的用户拥有独立的配置存储,这样可以避免不同用户之间的配置冲突。当通过 sudo 或不同用户设置和读取 GSettings 键值时,它们实际上访问的是不同的配置数据库文件,因此不会相互覆盖或影响。这种机制在多用户系统中确保了配置管理的隔离和安全性。

2024-06-22 10:55:23 502

原创 GSettings(一)——Root 权限的服务调用Gsetting失效

GSettings 通过 GObject 库与 D-Bus 进行通信,将配置请求发送到 DConf 后端,由 DConf 后端实际存储和管理配置数据。而无法正确连接到 D-Bus 会话总线,就会无法设置 GSettings 的 key。因为 D-Bus 会话总线是 GSettings 操作的基础,如果无法连接,就无法进行设置。

2024-06-22 10:14:22 651

原创 D-Bus——system 调用session 报错

即使将 DBUS_SESSION_BUS_ADDRESS 环境变量正确设置为普通用户的会话总线地址,root 用户可能仍然无法访问会话总线服务,原因包括权限问题、安全策略和用户会话隔离等。即使你将 DBUS_SESSION_BUS_ADDRESS 设置为指向普通用户的会话总线地址,root 用户可能没有访问该套接字的权限。每个用户会话有自己的会话总线,且这些总线是相互隔离的,防止不同用户会话之间的干扰。DBUS_SESSION_BUS_ADDRESS:环境变量,用于存储会话总线的地址。

2024-06-12 22:57:04 789

原创 D-Bus——注册system bus

将上述内容保存为 /etc/dbus-1/system.d/com.example.conf。需要修改 D-Bus 的配置文件,以允许该服务的注册。D-Bus 服务文件应该放在 /usr/share/dbus-1/system-services/ 目录下。在运行你的可执行文件后,确保它没有崩溃或退出。确保服务文件的名称和路径与 D-Bus 配置一致,并且在服务文件中使用的 Exec 路径是正确的。现在,再次运行你的程序,确保 D-Bus 服务可以成功注册。问题可能出在几个方面,尤其是服务文件的位置和权限。

2024-06-12 22:50:29 986

原创 D-Bus——DBUS_SESSION_BUS_ADDRESS 环境变量为空

DBUS_SESSION_BUS_ADDRESS 在 root 用户环境下通常为空,因为会话总线是与用户会话相关的概念。要在 root 用户环境中使用会话总线,需要手动设置该环境变量。区分系统环境变量和用户环境变量可以通过其定义位置和适用范围来进行。

2024-06-12 22:45:27 786

原创 D-Bus—— daemon 守护进程

dbus-daemon 是 D-Bus 的守护进程,负责处理客户端和服务端的交互。它在系统和会话级别分别管理系统总线和会话总线,提供进程间通信的基础设施。通过 dbus-daemon,客户端可以发送和接收消息,查找和启动服务,实现复杂的进程间通信和协作。

2024-06-12 22:40:54 879

原创 D-Bus——Bus服务查找和启动

它们是 D-Bus 服务描述文件,用于定义在需要时如何启动相应的服务。至于区分哪些用户需要运行这些服务,D-Bus 的会话总线和系统总线有不同的处理机制。存放在和 ~/.local/share/dbus-1/services 下的 .service 文件用于定义会话总线服务。这些文件描述了当客户端请求某个服务时,如何启动该服务。当客户端向会话总线发送消息并请求某个服务时,如果该服务尚未运行,会话总线守护进程会查找服务描述文件来启动该服务。

2024-06-12 22:37:12 602

原创 D-Bus——system bus调用机制

系统总线地址:系统总线使用固定的 UNIX 套接字路径(如 /var/run/dbus/system_bus_socket),客户端直接连接这个路径。配置文件:系统总线的行为和服务目录通过配置文件(如 /etc/dbus-1/system.conf 和 /usr/share/dbus-1/system-services/)进行定义。服务查找:系统总线守护进程根据服务描述文件来查找和激活服务,不依赖环境变量。

2024-06-12 22:27:27 744

原创 D-Bus——session bus调用机制

首先,D-Bus 客户端程序会读取环境变量 DBUS_SESSION_BUS_ADDRESS。这个环境变量包含了会话总线的地址信息,通常是一个包含 Unix 套接字路径的地址字符串。这个地址表示会话总线在 /tmp/dbus-XYZ123 这个 Unix 套接字路径上监听。解析出总线地址后,客户端程序会尝试连接到指定的 Unix 套接字。客户端解析从环境变量中获取的总线地址。通过这些步骤,客户端能够与会话总线进行有效的进程间通信。

2024-06-12 22:16:12 685

空空如也

空空如也

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

TA关注的人

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