
qt笔记
文章平均质量分 57
阳光开朗_大男孩儿
不为未发生的事担忧,不为过去的事后悔。与其担忧,不如做好当下,与其后悔,不如行动弥补
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
QProcess执行脚本
【代码】QProcess执行脚本。原创 2025-07-13 16:38:19 · 283 阅读 · 0 评论 -
qt如何实现跨平台,linux和windows开发,并且qt代码中如何处理跨平台
Qt是一个非常强大的跨平台开发框架,它可以让你在多个平台上编写和运行相同的代码,包括Linux、Windows、macOS等。Qt的一些类封装了不同操作系统的底层实现,确保在不同平台上有一致的行为。Qt通过提供不同的字体渲染引擎(如Qt::HighDpiScaleFactorRoundingPolicy)来处理不同平台的字体和分辨率问题,确保UI在不同平台上保持一致。Qt的底层代码为不同的平台提供了一个统一的抽象层。在Qt中,你可以通过QMAKE来控制不同平台的库依赖,确保每个平台都有合适的库。原创 2025-03-18 21:09:29 · 2544 阅读 · 0 评论 -
Qt框架中的插件机制
首先,需要在主程序中定义一个接口,这个接口规定了插件需要实现的方法。public:// 插件需要实现的功能Q_DECLARE_INTERFACE:通过这个宏,声明了插件接口的唯一标识符(IID)。这个标识符用于插件的注册和加载。定义插件接口:通过纯虚类定义插件的标准接口,并使用Q_DECLARE_INTERFACE宏注册接口标识符。实现插件:插件实现接口,并使用Q_PLUGIN_METADATA注册插件元数据,Q_EXPORT_PLUGIN2导出插件。原创 2024-12-31 13:21:35 · 1430 阅读 · 0 评论 -
QT_BEGIN_NAMESPACE 和 QT_END_NAMESPACE (二)
如果没有使用命名空间,符号会在 全局命名空间 中进行解析。编译和链接时,多个库中的相同符号(如变量名、宏、类名等)会合并,导致冲突。使用命名空间(如 QT_BEGIN_NAMESPACE 和 QT_END_NAMESPACE)能够确保符号不会与其他库中的符号发生冲突,因为命名空间会将符号隔离开来,避免它们在全局命名空间中重名。原创 2024-12-31 11:43:42 · 1111 阅读 · 0 评论 -
QT_BEGIN_NAMESPACE 和 QT_END_NAMESPACE(一)
具体来说,它们用来定义 Qt 命名空间的开始和结束位置。原创 2024-12-31 11:40:14 · 787 阅读 · 0 评论 -
为什么相同的符号在不同的库中会发生冲突?
使用命名空间可以避免符号冲突,这个说法是有条件的,前提是每个库应该使用不同的命名空间。如果不同的库都使用了相同的命名空间(比如 Qt),而且定义了相同名称的符号,它们 依然会发生冲突。全局命名空间中的冲突:如果两个库没有使用命名空间,符号会被放在全局命名空间中,链接器会发生冲突。相同命名空间中的冲突:如果两个库都使用了相同的命名空间(例如 Qt),它们的符号仍然会发生冲突。原创 2024-12-31 11:37:56 · 941 阅读 · 0 评论 -
takeFirst()
takeFirst() 是 Qt 中QList类的一个成员函数,它的作用是移除并返回列表中的第一个元素。具体来说,takeFirst()会执行以下操作:1.返回并移除第一个元素:该函数会返回列表中的第一个元素,并同时将其从列表中移除。2.改变列表的大小:移除元素后,列表的大小会减少,原本第一个元素之后的所有元素会向前移动一位。3. 时间复杂度:对于 `QList` 来说,`takeFirst()` 的时间复杂度为 O(1),因为它只涉及到头部元素的移除,而不需要重新排列其他元素。原创 2024-11-29 13:45:44 · 422 阅读 · 0 评论 -
i18n文本中的&符号
/ 显式设置快捷键在这个例子中:- `"Re&store"` 会显示为 `"Restore"`,并且 `S` 字母会被设置为快捷键。- 另外,快捷键 `Ctrl + R` 也是显式设置的。i18n("Re&store")中的 `&` 用于指定快捷键,Qt 会将 `&` 后的字符识别为快捷键字符。在不同的语言环境下,Qt 会根据翻译文件自动处理文本和快捷键的映射。当翻译字符串时,`&` 后的字符也会作为快捷键字符处理.原创 2024-11-12 13:33:38 · 591 阅读 · 0 评论 -
invokeMethod和直接调用函数的区别是什么
总结来说,QMetaObject::invokeMethod 提供了更多的灵活性和动态调用的能力,而直接调用函数提供了更高的性能和编译时安全保障。这个调用方式更加灵活,允许在运行时确定调用哪个方法。例如,可以通过用户输入或某个配置来动态决定调用哪个函数。这是最直接、最简单的调用方式,编译器在编译时就能检查函数是否存在、参数是否匹配。原创 2024-10-24 16:08:25 · 730 阅读 · 0 评论 -
QMetaObject invokeMethod
QMetaObject::invokeMethod 是一个灵活且强大的工具,尤其在需要动态方法调用或跨线程操作时非常有用。它可以有效地简化线程间的通信和异步操作,使开发者无需显式处理复杂的线程同步逻辑。原创 2024-10-24 16:06:47 · 513 阅读 · 0 评论 -
blockSignals(true)
当使用`blockSignals(true)`时,所有被阻塞的对象在此期间产生的信号都不会被发送出去。具体来说,`blockSignals(true)`会临时屏蔽该对象的所有信号,直到调用`blockSignals(false)`为止。在这段时间内,任何信号的产生都不会触发连接的槽函数。原创 2024-09-27 10:13:05 · 553 阅读 · 0 评论 -
阻塞信号(`blockSignals(true)`)的作用
这在处理用户界面组件(如滑块、滚动条)时尤为重要,因为这些组件的值变化通常会触发信号,而这些信号可能会引发一系列的回调和处理逻辑,导致一些意外行为或性能问题。在上述代码中,如果不阻止信号,`model->setOpacity` 会触发 `opacityChanged` 信号,进而调用更新滑块值的函数,滑块值的改变又会触发 `valueChanged` 信号,导致模型更新,再次触发信号,形成无限循环。例如,更新滑块值的同时可能会触发其他UI组件的更新,这些组件的状态改变又会影响滑块,形成复杂的依赖关系。原创 2024-09-27 10:05:08 · 432 阅读 · 0 评论 -
Qt::WA_TranslucentBackground
即便混成关闭,设置 `Qt::WA_TranslucentBackground` 后,Qt会通过调整窗口的绘制请求来优化X11的重绘过程,减少了可能的残影现象。- 没有设置透明背景时,Qt会向X11发出绘制请求,但这些请求可能不会触发对窗口背景的重新绘制,因为X11并不需要“清空”旧的背景内容,只需绘制新内容。它通过调用X11的API来请求重绘、移动窗口等操作,但实际的渲染是由X11来完成的。当混成关闭时,窗口的绘制通常是由X11或其他窗口系统(如Wayland)来处理,而不是Qt直接绘制。原创 2024-09-25 13:43:47 · 1119 阅读 · 0 评论 -
qApp->allWindows()
如果某个窗口不属于当前应用程序(例如是其他应用程序的窗口,或者是通过系统级 API 创建的非 Qt 窗口),那么 qApp->allWindows() 无法获取到这些窗口。qApp->allWindows() 的实现原理是基于 Qt 内部维护的一个窗口列表,该列表会自动追踪当前 QApplication 中创建和管理的所有顶级窗口。如果一个窗口是另一个窗口的子窗口,那么它不会单独出现在 allWindows() 列表中,因为它被认为是父窗口的一部分。原创 2024-09-11 10:53:17 · 431 阅读 · 0 评论 -
获取当前widget是否显示
在这个示例中,重写了 `showEvent` 和 `hideEvent` 函数,在其中分别启动和关闭定时器。这样,当 `DateTimeWidget` 的特定 `widget` 显示时,定时器会自动启动;当 `widget` 隐藏时,定时器会自动关闭。在某个特定 `widget` 显示时启动定时器,在隐藏时关闭定时器,可以通过重写 `showEvent` 和 `hideEvent` 事件来实现。在这些事件中,可以检查特定 `widget` 是否显示,然后启动或关闭定时器。原创 2024-05-20 19:27:07 · 463 阅读 · 0 评论 -
QDBus监听属性改变
在这个示例中,连接到了指定接口的对象,并监听其 `PropertyChanged` 信号。在信号槽函数中,我们检查属性名称是否为 `TimeUSec`,如果是,则发出信号 `timeChange()`。原创 2024-05-20 19:24:48 · 265 阅读 · 0 评论 -
去除字符串前导零
在这个示例中,我们使用了QRegularExpression类创建了一个正则表达式模式来匹配字符串开头的所有前导零,并使用replace()函数将其替换为空字符串,从而实现去除前导零的目的。在这个示例中,我们首先创建了两个QString对象,然后使用trimmed()函数去除了两端的空格,包括前导零。最后,使用qDebug()输出了去除前导零后的字符串。在Qt中,你可以使用QString类的trimmed()函数来去除字符串两端的空格,包括前导零。原创 2024-05-20 19:22:56 · 805 阅读 · 0 评论 -
DBus初识
在这个例子中,我们将创建一个名为 `com.example.SampleService` 的D-Bus服务,该服务具有一个接口 `com.example.SampleInterface`,其中包含一个方法 `SayHello`,该方法接受一个字符串参数并返回一个字符串。在这个示例中,我们创建了一个继承自 `QDBusAbstractAdaptor` 的 `SampleAdaptor` 类,该类包含了一个名为 `SayHello` 的槽函数,用于处理 `SayHello` 方法的调用。原创 2024-05-19 15:53:55 · 970 阅读 · 0 评论 -
paintevent讲解
当事件循环处理这个事件时,它会检查事件的目标对象(即接收到事件的对象),并调用目标对象的相应函数来处理这个事件,即调用窗口部件的`paintEvent`函数进行绘制。之后,事件循环会在适当的时候调用这个部件的paintEvent函数来处理这个事件。当一个事件发生时,比如需要重绘窗口部件,Qt会创建一个相应的事件对象,并将其放入该窗口部件的事件队列中。在某些情况下,即使不调用update()或repaint(),显示缓冲区也可能会被刷新,比如当其他窗口部件移动或者改变大小时,系统可能会触发部分或全局的重绘。原创 2024-05-12 21:50:28 · 2503 阅读 · 0 评论 -
自定义combobox组件样式
上面绘制的箭头,因为使用了自带的箭头,会有窗口失焦变化颜色的问题,可以通过监听鼠标事件进行再paintevent中进行绘制,但是我不想再其中有太多的判断,故使用drawline进行自己绘制。如果绘制文本缩略显示可以把代码修改为下面的样子。原创 2024-05-12 21:27:16 · 292 阅读 · 0 评论 -
QSharedPointer的使用
在 Qt 框架中,`QSharedPointer` 是一个智能指针,用于自动管理对象的生命周期。当你试图将一个裸指针(例如 `QLabel*`)赋给一个 `QSharedPointer<QLabel>` 时,会出现错误。`QSharedPointer` 没有定义用于从裸指针赋值的操作符 `=`。假设 `QLabel` 是一个类,你可以使用如下方式修正这个错误:其中 `args...` 是传递给 `QLabel` 构造函数的参数。原创 2024-05-12 21:16:52 · 1210 阅读 · 0 评论 -
Qt——代码崩溃 free() invalid pointer
2. 这点就是我这里的错误原因: 如果单例被设计为在程序结束时通过其自己的逻辑来销毁,但在此之前所有的`QSharedPointer`都已经销毁并删除了该对象,那么当单例的析构逻辑再次尝试删除这个对象时,就会发生多重删除。在Qt中,`QSharedPointer` 是一个智能指针,它可以确保当不再有任何`QSharedPointer`指向一个对象时,该对象会被自动删除。如果用`QSharedPointer`来管理单例对象,那么当最后一个`QSharedPointer`被销毁时,单例对象也会被销毁。原创 2024-04-27 22:14:02 · 671 阅读 · 0 评论 -
Qt——HighLight篇
在这个示例中,我们使用了 palette().color(QPalette::Highlight) 来获取 Qt 的高亮显示颜色,并将其设置为按钮的背景颜色。要实现按钮在失去焦点时依然显示高亮颜色,可以通过重写按钮的focusOutEvent事件,并在其中更新按钮的绘制状态以保持高亮颜色。QPalette::Highlight 是 QPalette 中的一个角色,用于指定突出显示的颜色,例如选中文本或者具有焦点的控件背景颜色。这样设置之后,按钮的突出显示颜色将会是红色,而不是默认的蓝色。原创 2024-05-09 22:26:05 · 1500 阅读 · 0 评论 -
QLabel文本
在这个示例中,我们创建了一个QLabel,然后使用`setAlignment(Qt::AlignCenter)`方法将文本设置为居中对齐。这样,标签中的文本就会在水平和垂直方向上都居中显示了。要将QLabel中的文本居中显示,可以使用`setAlignment()`方法来设置文本的对齐方式为居中。原创 2024-05-09 22:10:31 · 2139 阅读 · 0 评论 -
QpushButton绘制圆角矩形并绘制背景颜色
在这个示例中,我们创建了一个名为CustomButton的自定义QPushButton类,并重写了它的paintEvent函数。在paintEvent函数中,我们使用QPainter来绘制按钮的背景颜色。在示例中,我们将按钮的背景颜色设置为红色。要在QPushButton的paintEvent中绘制按钮的颜色,可以创建一个自定义的QPushButton类,并重写它的paintEvent函数。在paintEvent函数中,可以使用QPainter来绘制按钮的背景颜色。原创 2024-05-09 22:07:42 · 568 阅读 · 0 评论 -
QpushButton实现文本自动换行
可以使用布局管理器或者设置按钮的最小宽度和固定高度。以下是一种通过布局管理器实现QPushButton按钮文本自动换行的方法:在这个示例中,我们创建了一个QPushButton按钮,并将其放置在一个垂直布局管理器中。由于布局管理器会自动调整其子部件的大小和位置,因此按钮的文本将自动换行以适应按钮的大小。原创 2024-05-09 22:05:41 · 2789 阅读 · 0 评论 -
Qt——实现添加子控件后,始终保证在布局低端添加
总共有两种办法,一种不断地删除布局,重新添加`addStretch()` ,另一种使用两个布局,一个主布局和一个次级布局。次级布局用于添加大部分小部件,而主布局则用于放置这个次级布局和 stretch。这样,你可以自由地向次级布局添加小部件,而无需每次都调整 stretch 的位置。在 Qt 中使用 `QVBoxLayout` 时,`addStretch()` 方法通常用于在布局中添加一个可伸缩的空间,这有助于推动没有固定空间要求的小部件向布局的顶部或底部移动。原创 2024-04-27 22:02:45 · 330 阅读 · 0 评论 -
Qt——置灰窗口
在这个示例中,我们创建了一个简单的Qt窗口,将一个`QLabel`放在窗口中心,并使用`QGraphicsOpacityEffect`将窗口置灰。然后,通过`setDisabled(true)`方法禁用窗口上的所有交互。这样,整个窗口及其子窗口都将被置灰且不可点击。在Qt中,你可以使用`QGraphicsEffect`来将一个窗口置灰化。同时,你可以通过设置`QGraphicsEffect`来禁用整个窗口上的所有交互。原创 2024-04-27 21:56:54 · 619 阅读 · 0 评论 -
Qt——字符串拼接汉化
在 Qt 中,字符串拼接与国际化(即字符串的翻译)是有一些复杂的关系的。尤其当你想把拼接的字符串进行翻译时,通常的 `tr()` 方法可能无法直接奏效,因为 `lupdate` 工具(用于提取可翻译字符串)可能不会正确解析动态拼接的字符串。需要确保使用 `tr()` 方法的类继承自 `QObject`,且正确使用 `Q_OBJECT` 宏,以便 `lupdate` 工具可以提取出需要翻译的字符串。在例子中,`%1`、`%2` 和 `%3` 是占位符,将在运行时被 `arg()` 方法替换。原创 2024-04-27 21:49:03 · 457 阅读 · 0 评论 -
Qt——实现滚动条添加小组件自动跳转到最后
为了使滚动区域在您添加新的控件后自动滑动到底部,显示新增的窗口,您可以利用 Qt 的 `QScrollArea` 的滚动条进行调整。在您的 `DWidget::toggleNewAdd` 函数中,添加窗口到布局后,可以通过调整滚动区的滚动条到最大值来实现这一点。如果您在添加控件后直接设置滚动条值,有时候可能由于布局更新的延迟,滚动条可能不会滚动到完全正确的位置。这样可以确保所有的布局和尺寸调整都已完成。1. 确保您有一个 `QScrollArea` 成员变量,并且它的中心控件已经设置好,以便添加新的控件。原创 2024-04-27 21:44:45 · 723 阅读 · 0 评论 -
Qt——设置字体颜色
【代码】Qt——设置字体颜色。原创 2024-04-27 21:41:15 · 1162 阅读 · 0 评论 -
Qt——QGridLayout
在Qt中,如果你想设置网格布局(`QGridLayout`)中单元格的比例,你需要使用`QGridLayout`的拉伸系数(stretch factors)来控制行和列的相对大小。你可以通过调用`setRowStretch`和`setColumnStretch`方法来实现。以下是一个简单的例子,展示了如何为一个两列的布局设置不同的比例。假设我们想要第一列是第二列宽度的两倍:、在上面的代码中,我们设置了第一列的拉伸系数为2,第二列的拉伸系数为1。这意味着第一列的宽度将是第二列的两倍。原创 2024-04-24 22:07:32 · 2294 阅读 · 0 评论 -
qt——窗口置灰不可操作
虽然`setEnabled(false)`会自动让大多数控件看起来是灰色的,但有时你可能需要更明显的视觉效果,或者要自定义非标准控件的视觉表现。在Qt中实现一个窗口(或窗口中的特定部分)置灰并不可操作,通常涉及到两个概念:禁用窗口的交互功能以及视觉上的置灰效果。如果你希望整个窗口都不可交互,可以简单地使用`QWidget`的`setEnabled(false)`方法。这将禁用窗口及其所有子控件的交互能力。这段代码将在窗口的内容上绘制一个半透明的灰色矩形,从而给用户一种窗口被禁用的视觉印象。原创 2024-04-24 22:03:20 · 1629 阅读 · 0 评论 -
Qt——Qt connect问题
此外,这里尝试两次修改并使用`value`,这在逻辑上也是有问题的,因为第一次`remove`调用已经改变了`value`。这个错误是由于在`connect`函数中的lambda表达式修改了一个以非`const`引用方式传递的参数,而该参数本应当是不可修改的。- 确保connect中的信号的参数类型与槽的参数类型完全匹配。- `data()`:这个方法返回存储在`QSharedPointer<DataInteraction>`中的`DataInteraction`对象的原始指针。原创 2024-04-24 22:00:22 · 737 阅读 · 0 评论 -
Qt——QString 只保留数字
在Qt 5之后的版本中,`QRegExp`已经被更现代和功能更强大的`QRegularExpression`所取代。在Qt中,如果你想从一个`QString`对象中只保留数字,可以使用`QString::remove()`函数结合一个正则表达式来实现。`[^0-9]`的意思是匹配任何不在`0-9`范围内的字符。- remove():`QString::remove()`函数接受一个`QRegExp`对象作为参数,并移除所有匹配该正则表达式的字符。原创 2024-04-24 21:48:30 · 964 阅读 · 0 评论 -
qt——设置ComBox的默认显示内容
在Qt中设置`QComboBox`的默认显示内容是一个常见的需求。有几种方法可以设置或更改`QComboBox`的默认显示项,包括在开始时选择一个特定的索引,或者显示一个提示性的文本作为默认内容。下面将分别介绍这些方法。原创 2024-04-24 21:44:03 · 4932 阅读 · 0 评论 -
Qt 的d指针
其中,`Q_DECLARE_PRIVATE(MyClass)` 宏用于声明一些辅助函数,它使得在 MyClass 的成员函数中可以更容易地访问 d_ptr 指向的私有成员。d 指针的核心思想是将类的私有成员变量放到一个单独的内部类中,并在原类中保留一个指向这个内部类的指针。通过这种方式,当内部实现需要更改时,只需要更改内部类,而不必更改公有类的头文件。2. 编译器耦合减少:由于私有成员的定义被移到了源文件中,改变私有成员不会触发依赖于相应头文件的代码重新编译。这种技术在 Qt 库中被广泛应用。原创 2024-03-14 09:42:37 · 947 阅读 · 0 评论 -
Qt的信号槽机制
在开始讲信号槽之前,我们先了解下Qt的框架的核心组成部分,Qt的元对象编译器(MOC)和元对象系统是Qt框架的核心组成部分,它们使得Qt拥有了信号与槽机制、反射(introspection)和属性系统等强大的特性。原创 2024-03-11 18:57:34 · 1747 阅读 · 0 评论