具体的QPushButton风格

时间:2012-12-01 00:13:12

标签: c++ qt user-interface qtstylesheets qpushbutton

如何自定义QPushButton或QToolButton的外观以使其看起来像elementaryos的网页“按钮”?

Button images

所有我真正想要的是特色图像位置和它旁边的文字,也许如果我很幸运我也可以得到这样的边框,但我真的不需要标题下方的小描述:) 我可以只使用StyleSheets,或者我必须继承QPushButton / QAbstractButton /类似的东西吗?我已经到处搜索,但没有发现自定义的级别没有在固定位置绘制内容,这正是我想要的。

编辑: 我真的想要一个解决方案,它可以让我获得一个可自定义的按钮,而不是一个固定的图像,在

的轨道上的东西
MainWindowButton(QString(title), /*opt*/QString(description), QImage(icon));

2 个答案:

答案 0 :(得分:1)

您可以使用右侧角落的图标将背景设置为白色,并使用border-image stylesheet属性,其中底部边框与图标一样高,顶部,左右边框宽度为0像素。你需要制作一个自定义图像,它基本上看起来像左边和顶部有几个像素宽度的白色图标

http://doc.qt.digia.com/qq/qq20-qss.html#theboxmodel

您可能必须覆盖paintEvent的文本。

答案 1 :(得分:1)

有许多方法可行。

您可能首先考虑尝试使用普通QPushButtonQVBoxLayout来构建解决方案。你可以添加三个QLabels;一个用于标题文本,一个用于标题文本,一个用于图像。一些CSS可能用于渲染上下按钮的背景图像,更多CSS用于设置两个标签中的文本样式,并将图像定位在第三个标签上,但随后您会发现标签不会向下移动点击按钮。

我认为最好的解决方案是直接绘画。您可以通过对QWidget进行子类化并覆盖paintEvent()来完成此操作。为up状态渲染所有内容,并将所有内容一点一点地向下移动以进入向下状态。

您可以通过将上下状态呈现为QImage并使用CSS为它们设置QPush按钮样式而无需子类化来实现此目的。

这些方法也有很多种组合。