QT自定义按钮

Customise button in QT

我需要在 qt 中创建一个切换按钮,它应该如下图所示。它应该在打开时显示 ON 图像并保持此状态,直到再次切换。它应该在关闭的情况下显示关闭图像。请帮我解决这个问题。

最简单的方法是将开关图像作为资源添加到您的项目中 然后将按钮设置为 checkable 并在其属性中设置选择或不选择时要呈现的图像..(在 icon -> 选择了并且选择了关闭)

当然,您已经创建了具有适当几何形状的图像...在屏幕截图中,它们看起来很小,因为我从您的 post 那里借用了它们。 :)

您可以将图像用作图标(遗憾的是,默认情况下它不会随按钮缩放),创建一个 class 来在绘制事件的处理程序中绘制这些图像,或者您可以使用那些QSS 样式表 中的图像。 QSS 是 Qt GUI 元素的 CSS 2.0 模拟。

请注意,在使用样式表后,对所述元素的视觉效果的所有更改也应通过样式表的更改来完成。

可以通过右键单击小部件并选择“更改样式表”通过表单编辑器设置这些样式,或者通过调用 setStyleSheet 直接通过代码设置,具体取决于您喜欢的工作流程。

button->setStyleSheet(
    "QPushButton {  border-image: url(:/Resources/chbUnchecked.png); }"
    "QPushButton::checked { border-image: url(:/Resources/chbChecked.png); }" );

border-image 将图像缩放到边界限制,替换标准 border.There 也是一个 background-image,它会定期重复填充小部件的表面。

要限制此更改仅适用于可检查的按钮:

button->setStyleSheet(
    "QPushButton[checkable="true"] {    border-image: url(:/Resources/chbUnchecked.png); }"
    "QPushButton::checked[checkable="true"] {   border-image: url(:/Resources/chbChecked.png); }" );

:/Resources/ 是应用程序资源中的路径。

QSS 语法:https://doc.qt.io/Qt-5/stylesheet-syntax.html

请注意,QSS 有选择器,因此它具有与 CSS 相同的“级联”能力。您可以根据 GUI 上的层次结构位置、class-继承、class 名称、准状态和名称批量分配样式。

如果您将上面的样式设置为 window,则 window 中 QPushButton 的所有实例都将使用该样式。如果您为这样的按钮定义一个新的 class,您可以使用它的名称而不是标准按钮 class,尽管基础 class 的 QSS 将适用于它。