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

时间:2013-09-17 04:06:29

标签: c++ qt qt-designer qtgui qmenu

我正在尝试使用Qt Designer向我的QMenu添加一个图标,但是当我添加了我的图标时,我意识到我的文字会消失。我有什么方法可以在我的文字旁边显示我的图标吗?

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分: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如何将自定义小部件插入工具栏和菜单栏。我从来没有在任何认真的项目中使用过它,但是可能有用的意思。