【问题标题】:Qt QPushbutton Icon above Text文本上方的 Qt QPushbutton 图标
【发布时间】:2009-09-13 19:00:52
【问题描述】:

当我创建一个带有图标的 QPushButton 时,默认情况下它会在图标右侧显示文本。有没有办法让文字显示在图标下方?

【问题讨论】:

  • @Lundin 没问题。这是试图改善职位。我认为强调类名是个好主意。我还选择了帖子中最重要的词,以便于理解。
  • @fat 格式化类名或者其他明显的代码就可以了,但是随机词就不用加强调了。

标签: qt


【解决方案1】:

如果可以的话,最简单的做法是改用QToolButton

QToolButton* button = new QToolButton(this);
button->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
button->setIcon(myIcon);
button->setText("Sample text");

如果这不是一个选项,您可以考虑创建自己的按钮小部件,可能源自 QPushButton 或 QAbstractButton。在这种情况下,您可能(我自己还没有尝试过)希望将大部分精力集中在重新实现 paintEvent()

[编辑:阅读 cmets 寻找可能比这更简单的替代方案]

【讨论】:

  • 如果您愿意,您实际上可以将 UI 添加到 QPushButton。自动调整大小可能会很棘手,但这样您就可以完全控制图标和文本标签的位置。
  • 仅仅为了格式化而进行子类化通常是不值得的。仅通过应用样式就可以完成很多工作。虽然有关样式的文档可能会更好,但它的效果相当不错,而且通常符合预期。
  • 这正是我想要做的。谢谢!
  • @jpo38 关于[Edit: read the comments for alternatives ...,您能澄清一下您指的是哪个评论或解决方案吗?例如,您是指 Harald Scheirich 2009 年 9 月 13 日 21:11 在此解决方案中发表的评论,还是指另一个 solution 或其他解决方案的评论?
  • @mak:这条评论是5年前添加的,我不记得了……也可能是之后被删除的评论……
【解决方案2】:
QPushButton {
    padding: -25px 0 10px 0;
    border: 1px solid black;
    border-radius: 2px;
    background-position: center bottom;
    background-repeat: no-repeat;
    background-origin: content;
    background-image: url(":/new/resource/accept.png");
 }
QPushButton:disabled {
    background-image: url(":/new/resource/accept_b.png");
 }

【讨论】:

    【解决方案3】:

    QPushButton 无法做到这一点。在QPushButton 中,唯一的放置选项(LayoutDirection) 是LeftToRightRightToLeftAuto。但你可以改用QToolButton

    使用 Qt Creator,切换到 Design 窗格,添加QToolButton,然后在右侧底部窗格中,您将看到一个选项“textFormat”,在该选项中选择ToolButtonTextUnderIcon

    更新:在最新版本的 Qt Creator (4.7.0) 中,textFormat 选项已更改为 toolButtonStyle

    【讨论】:

    • 在我的 qtcreator 中它被称为“toolButtonStyle”。
    • 那是 QToolButton,OP 询问 QPushButton
    • @LennartRolland 谢谢我更新了我的答案以反映新的变化。
    • @cz 更新了答案,提到QPushButton是不可能的
    猜你喜欢
    • 1970-01-01
    • 2011-08-09
    • 1970-01-01
    • 1970-01-01
    • 2011-05-31
    • 1970-01-01
    • 2014-01-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多