如何在QDialogBu ttonBox中将图标设置为新按钮?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在QDialogBu ttonBox中将图标设置为新按钮?相关的知识,希望对你有一定的参考价值。

我正在尝试在Kubuntu 14.04的Qt5程序(Qt 5.5.1)中使用QDialogButtonBox中的图标制作一个自定义按钮。阅读this answer,我知道不建议只编辑股票按钮,所以我使用QDialogButtonBox::addButton和我的自定义按钮。但出于某种原因,虽然我确实成功更改了股票按钮的图标,但使用QPushButton::setIcon后,我的自定义按钮仍然没有任何图标。

这是代码

#include <QApplication>
#include <QDialogButtonBox>
#include <QPushButton>

int main(int argc, char** argv)
{
    QApplication app(argc,argv);

    QDialogButtonBox bbox(QDialogButtonBox::Close);

    const auto button=new QPushButton(QObject::tr("Convert..."));
    bbox.addButton(QObject::tr("Convert..."), QDialogButtonBox::ApplyRole);
    const auto icon=QIcon::fromTheme("system-run");
    // This doesn't work - the button remains without icon
    button->setIcon(icon);
    // But this does
    bbox.button(QDialogButtonBox::Close)->setIcon(icon);

    bbox.show();

    return app.exec();
}

我究竟做错了什么?如何在我的自定义按钮上显示图标而无需编辑库存按钮?

答案

您正在创建两个按钮。一个按钮,你没有在任何地方显示,一个你在bbox添加。并且您正在设置您未在任何地方显示的按钮的图标。

修复你的代码,这样就不会创建两个单独的按钮,并为你放入bbox的按钮设置一个图标:

QPushButton *button = bbox.addButton(QObject::tr("Convert..."), QDialogButtonBox::ApplyRole);
...
button->setIcon(icon);

以上是关于如何在QDialogBu ttonBox中将图标设置为新按钮?的主要内容,如果未能解决你的问题,请参考以下文章

如何获取由 QDialogBu​​ttonBox 创建的 QPushButton 的角色?

Qt:如何使用 QSignalMapper 为非标准按钮实现 QDialogBu​​ttonBox ?

如何将 qlabel 添加到 QDialogBu​​ttonBox UI 文件

如何处理 QDialogBu​​ttonBox RestoreDefaults 按钮

根据多个 QComboBox 的文本启用或禁用 QDialogBu​​ttonBox

访问 Qt 的 QDialogBu​​ttonBox 中的单个按钮