qt笔记
阳光开朗_大男孩儿
不为未发生的事担忧,不为过去的事后悔。与其担忧,不如做好当下,与其后悔,不如行动弥补
展开
-
获取当前widget是否显示
在这个示例中,重写了 `showEvent` 和 `hideEvent` 函数,在其中分别启动和关闭定时器。这样,当 `DateTimeWidget` 的特定 `widget` 显示时,定时器会自动启动;当 `widget` 隐藏时,定时器会自动关闭。在某个特定 `widget` 显示时启动定时器,在隐藏时关闭定时器,可以通过重写 `showEvent` 和 `hideEvent` 事件来实现。在这些事件中,可以检查特定 `widget` 是否显示,然后启动或关闭定时器。原创 2024-05-20 19:27:07 · 227 阅读 · 0 评论 -
QDBus监听属性改变
在这个示例中,连接到了指定接口的对象,并监听其 `PropertyChanged` 信号。在信号槽函数中,我们检查属性名称是否为 `TimeUSec`,如果是,则发出信号 `timeChange()`。原创 2024-05-20 19:24:48 · 125 阅读 · 0 评论 -
去除字符串前导零
在这个示例中,我们使用了QRegularExpression类创建了一个正则表达式模式来匹配字符串开头的所有前导零,并使用replace()函数将其替换为空字符串,从而实现去除前导零的目的。在这个示例中,我们首先创建了两个QString对象,然后使用trimmed()函数去除了两端的空格,包括前导零。最后,使用qDebug()输出了去除前导零后的字符串。在Qt中,你可以使用QString类的trimmed()函数来去除字符串两端的空格,包括前导零。原创 2024-05-20 19:22:56 · 292 阅读 · 0 评论 -
DBus初识
在这个例子中,我们将创建一个名为 `com.example.SampleService` 的D-Bus服务,该服务具有一个接口 `com.example.SampleInterface`,其中包含一个方法 `SayHello`,该方法接受一个字符串参数并返回一个字符串。在这个示例中,我们创建了一个继承自 `QDBusAbstractAdaptor` 的 `SampleAdaptor` 类,该类包含了一个名为 `SayHello` 的槽函数,用于处理 `SayHello` 方法的调用。原创 2024-05-19 15:53:55 · 778 阅读 · 0 评论 -
paintevent讲解
当事件循环处理这个事件时,它会检查事件的目标对象(即接收到事件的对象),并调用目标对象的相应函数来处理这个事件,即调用窗口部件的`paintEvent`函数进行绘制。之后,事件循环会在适当的时候调用这个部件的paintEvent函数来处理这个事件。当一个事件发生时,比如需要重绘窗口部件,Qt会创建一个相应的事件对象,并将其放入该窗口部件的事件队列中。在某些情况下,即使不调用update()或repaint(),显示缓冲区也可能会被刷新,比如当其他窗口部件移动或者改变大小时,系统可能会触发部分或全局的重绘。原创 2024-05-12 21:50:28 · 1233 阅读 · 0 评论 -
自定义combobox组件样式
上面绘制的箭头,因为使用了自带的箭头,会有窗口失焦变化颜色的问题,可以通过监听鼠标事件进行再paintevent中进行绘制,但是我不想再其中有太多的判断,故使用drawline进行自己绘制。如果绘制文本缩略显示可以把代码修改为下面的样子。原创 2024-05-12 21:27:16 · 200 阅读 · 0 评论 -
QSharedPointer的使用
在 Qt 框架中,`QSharedPointer` 是一个智能指针,用于自动管理对象的生命周期。当你试图将一个裸指针(例如 `QLabel*`)赋给一个 `QSharedPointer<QLabel>` 时,会出现错误。`QSharedPointer` 没有定义用于从裸指针赋值的操作符 `=`。假设 `QLabel` 是一个类,你可以使用如下方式修正这个错误:其中 `args...` 是传递给 `QLabel` 构造函数的参数。原创 2024-05-12 21:16:52 · 519 阅读 · 0 评论 -
Qt——代码崩溃 free() invalid pointer
2. 这点就是我这里的错误原因: 如果单例被设计为在程序结束时通过其自己的逻辑来销毁,但在此之前所有的`QSharedPointer`都已经销毁并删除了该对象,那么当单例的析构逻辑再次尝试删除这个对象时,就会发生多重删除。在Qt中,`QSharedPointer` 是一个智能指针,它可以确保当不再有任何`QSharedPointer`指向一个对象时,该对象会被自动删除。如果用`QSharedPointer`来管理单例对象,那么当最后一个`QSharedPointer`被销毁时,单例对象也会被销毁。原创 2024-04-27 22:14:02 · 310 阅读 · 0 评论 -
Qt——HighLight篇
在这个示例中,我们使用了 palette().color(QPalette::Highlight) 来获取 Qt 的高亮显示颜色,并将其设置为按钮的背景颜色。要实现按钮在失去焦点时依然显示高亮颜色,可以通过重写按钮的focusOutEvent事件,并在其中更新按钮的绘制状态以保持高亮颜色。QPalette::Highlight 是 QPalette 中的一个角色,用于指定突出显示的颜色,例如选中文本或者具有焦点的控件背景颜色。这样设置之后,按钮的突出显示颜色将会是红色,而不是默认的蓝色。原创 2024-05-09 22:26:05 · 1136 阅读 · 0 评论 -
QLabel文本
在这个示例中,我们创建了一个QLabel,然后使用`setAlignment(Qt::AlignCenter)`方法将文本设置为居中对齐。这样,标签中的文本就会在水平和垂直方向上都居中显示了。要将QLabel中的文本居中显示,可以使用`setAlignment()`方法来设置文本的对齐方式为居中。原创 2024-05-09 22:10:31 · 577 阅读 · 0 评论 -
QpushButton绘制圆角矩形并绘制背景颜色
在这个示例中,我们创建了一个名为CustomButton的自定义QPushButton类,并重写了它的paintEvent函数。在paintEvent函数中,我们使用QPainter来绘制按钮的背景颜色。在示例中,我们将按钮的背景颜色设置为红色。要在QPushButton的paintEvent中绘制按钮的颜色,可以创建一个自定义的QPushButton类,并重写它的paintEvent函数。在paintEvent函数中,可以使用QPainter来绘制按钮的背景颜色。原创 2024-05-09 22:07:42 · 322 阅读 · 0 评论 -
QpushButton实现文本自动换行
可以使用布局管理器或者设置按钮的最小宽度和固定高度。以下是一种通过布局管理器实现QPushButton按钮文本自动换行的方法:在这个示例中,我们创建了一个QPushButton按钮,并将其放置在一个垂直布局管理器中。由于布局管理器会自动调整其子部件的大小和位置,因此按钮的文本将自动换行以适应按钮的大小。原创 2024-05-09 22:05:41 · 837 阅读 · 0 评论 -
Qt——实现添加子控件后,始终保证在布局低端添加
总共有两种办法,一种不断地删除布局,重新添加`addStretch()` ,另一种使用两个布局,一个主布局和一个次级布局。次级布局用于添加大部分小部件,而主布局则用于放置这个次级布局和 stretch。这样,你可以自由地向次级布局添加小部件,而无需每次都调整 stretch 的位置。在 Qt 中使用 `QVBoxLayout` 时,`addStretch()` 方法通常用于在布局中添加一个可伸缩的空间,这有助于推动没有固定空间要求的小部件向布局的顶部或底部移动。原创 2024-04-27 22:02:45 · 210 阅读 · 0 评论 -
Qt——置灰窗口
在这个示例中,我们创建了一个简单的Qt窗口,将一个`QLabel`放在窗口中心,并使用`QGraphicsOpacityEffect`将窗口置灰。然后,通过`setDisabled(true)`方法禁用窗口上的所有交互。这样,整个窗口及其子窗口都将被置灰且不可点击。在Qt中,你可以使用`QGraphicsEffect`来将一个窗口置灰化。同时,你可以通过设置`QGraphicsEffect`来禁用整个窗口上的所有交互。原创 2024-04-27 21:56:54 · 353 阅读 · 0 评论 -
Qt——字符串拼接汉化
在 Qt 中,字符串拼接与国际化(即字符串的翻译)是有一些复杂的关系的。尤其当你想把拼接的字符串进行翻译时,通常的 `tr()` 方法可能无法直接奏效,因为 `lupdate` 工具(用于提取可翻译字符串)可能不会正确解析动态拼接的字符串。需要确保使用 `tr()` 方法的类继承自 `QObject`,且正确使用 `Q_OBJECT` 宏,以便 `lupdate` 工具可以提取出需要翻译的字符串。在例子中,`%1`、`%2` 和 `%3` 是占位符,将在运行时被 `arg()` 方法替换。原创 2024-04-27 21:49:03 · 238 阅读 · 0 评论 -
Qt——实现滚动条添加小组件自动跳转到最后
为了使滚动区域在您添加新的控件后自动滑动到底部,显示新增的窗口,您可以利用 Qt 的 `QScrollArea` 的滚动条进行调整。在您的 `DWidget::toggleNewAdd` 函数中,添加窗口到布局后,可以通过调整滚动区的滚动条到最大值来实现这一点。如果您在添加控件后直接设置滚动条值,有时候可能由于布局更新的延迟,滚动条可能不会滚动到完全正确的位置。这样可以确保所有的布局和尺寸调整都已完成。1. 确保您有一个 `QScrollArea` 成员变量,并且它的中心控件已经设置好,以便添加新的控件。原创 2024-04-27 21:44:45 · 379 阅读 · 0 评论 -
Qt——设置字体颜色
【代码】Qt——设置字体颜色。原创 2024-04-27 21:41:15 · 514 阅读 · 0 评论 -
Qt——QGridLayout
在Qt中,如果你想设置网格布局(`QGridLayout`)中单元格的比例,你需要使用`QGridLayout`的拉伸系数(stretch factors)来控制行和列的相对大小。你可以通过调用`setRowStretch`和`setColumnStretch`方法来实现。以下是一个简单的例子,展示了如何为一个两列的布局设置不同的比例。假设我们想要第一列是第二列宽度的两倍:、在上面的代码中,我们设置了第一列的拉伸系数为2,第二列的拉伸系数为1。这意味着第一列的宽度将是第二列的两倍。原创 2024-04-24 22:07:32 · 821 阅读 · 0 评论 -
qt——窗口置灰不可操作
虽然`setEnabled(false)`会自动让大多数控件看起来是灰色的,但有时你可能需要更明显的视觉效果,或者要自定义非标准控件的视觉表现。在Qt中实现一个窗口(或窗口中的特定部分)置灰并不可操作,通常涉及到两个概念:禁用窗口的交互功能以及视觉上的置灰效果。如果你希望整个窗口都不可交互,可以简单地使用`QWidget`的`setEnabled(false)`方法。这将禁用窗口及其所有子控件的交互能力。这段代码将在窗口的内容上绘制一个半透明的灰色矩形,从而给用户一种窗口被禁用的视觉印象。原创 2024-04-24 22:03:20 · 805 阅读 · 0 评论 -
Qt——Qt connect问题
此外,这里尝试两次修改并使用`value`,这在逻辑上也是有问题的,因为第一次`remove`调用已经改变了`value`。这个错误是由于在`connect`函数中的lambda表达式修改了一个以非`const`引用方式传递的参数,而该参数本应当是不可修改的。- 确保connect中的信号的参数类型与槽的参数类型完全匹配。- `data()`:这个方法返回存储在`QSharedPointer<DataInteraction>`中的`DataInteraction`对象的原始指针。原创 2024-04-24 22:00:22 · 464 阅读 · 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 · 526 阅读 · 0 评论 -
qt——设置ComBox的默认显示内容
在Qt中设置`QComboBox`的默认显示内容是一个常见的需求。有几种方法可以设置或更改`QComboBox`的默认显示项,包括在开始时选择一个特定的索引,或者显示一个提示性的文本作为默认内容。下面将分别介绍这些方法。原创 2024-04-24 21:44:03 · 1430 阅读 · 0 评论 -
Qt 的d指针
其中,`Q_DECLARE_PRIVATE(MyClass)` 宏用于声明一些辅助函数,它使得在 MyClass 的成员函数中可以更容易地访问 d_ptr 指向的私有成员。d 指针的核心思想是将类的私有成员变量放到一个单独的内部类中,并在原类中保留一个指向这个内部类的指针。通过这种方式,当内部实现需要更改时,只需要更改内部类,而不必更改公有类的头文件。2. 编译器耦合减少:由于私有成员的定义被移到了源文件中,改变私有成员不会触发依赖于相应头文件的代码重新编译。这种技术在 Qt 库中被广泛应用。原创 2024-03-14 09:42:37 · 761 阅读 · 0 评论 -
Qt的信号槽机制
在开始讲信号槽之前,我们先了解下Qt的框架的核心组成部分,Qt的元对象编译器(MOC)和元对象系统是Qt框架的核心组成部分,它们使得Qt拥有了信号与槽机制、反射(introspection)和属性系统等强大的特性。原创 2024-03-11 18:57:34 · 1647 阅读 · 0 评论