当添加图标时,QMenu项目文本消失

14

我正在尝试使用Qt Designer向我的QMenu添加图标,但我发现当我添加图标后,文本会消失。有没有办法让我的文本和图标同时显示?


这是发生在主工具栏中的工具按钮上吗?还是当您展开菜单并出现操作时发生在那个位置? - Tab
不,QMenu被放置在QMenuBar上。QMenu的文本为“文件”,如果我向其添加图标,则文本“文件”会消失,只有图标存在。 - MistyD
1
我认为没有提供任何方法,这只是我的建议,使用一个带有文字和图片的图标;)。顺便说一句,好问题! - Tab
我认为应该有一个类似于QToolButton中的选项,例如TextBesideIconIconOnly等的样式属性。 - headsvk
你好,你能找出这是如何可能的吗? - Saeed Masoomi
显示剩余5条评论
2个回答

2

在Qt 4中不支持,也许在Qt5中支持,我没有检查过。 在Designer本身中你无法做太多事情。在代码中,一个选项是自定义样式,以绘制图标和文本: - QStyle :: CT_MenuBarItem的sizeFromContents - QStyle :: CE_MenuBarItem的drawControl - QStyleOptionMenuItem的drawCustomControl


你能举一个使用给定的 ui->menuMyQMenu 的例子吗? - nwp
@nwp:很遗憾,答案是由未注册的访客提交的。不确定在这种情况下当你写信给他们时,他们是否能收到通知。 - László Papp

0

这个默认情况下不被支持,主要是因为这不是通常在此处希望实现的操作。当然,您可以始终使用包含文本的图像,但那也是hackish的,除非您动态绘制图像,然后稍后加载它。即使那样也需要相当多的工作。

为了实现这一点,您需要稍微折腾一下Qt。这是我个人开始尝试的最接近实验。我还没有时间检查它是否实际起作用,但应该有些类似以下代码:

class CustomMenuBarWidget : public QWidget
{
public:
    explicit CustomMenuBarWidget(QWidget *parent = Q_NULLPTR)
        : QWidget(parent)
        , menuBar(new QMenuBar())
        {
        }

    virtual void paintEvent(QPaintEvent *event) {
        QStyleOptionMenuItem styleOptionMenuItem;
        QIcon icon("path/to/my/icon");
        styleOptionMenuItem.icon = icon;
        styleOptionMenuItem.text = "Hello World!";
        QPainter painter(this);
        menuBar->style()->drawControl(QStyle::CE_MenuBarItem, &styleOptionMenuItem, &painter, menuBar);
    }
private:
    QMenuBar *menuBar;
};

你可能也可以看一下QWidgetAction,了解如何将自定义小部件插入到工具栏和菜单栏中。我自己在任何严肃的项目中从未使用过它,但知道这个可能会有用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接