13

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

4

2 回答 2

2

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

于 2014-12-05T10:07:16.470 回答
0

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

为了做到这一点,您需要稍微摆弄一下 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如何将自定义小部件插入工具栏和菜单栏。我自己从未在任何严肃的项目中使用过它,但可能会有所帮助。

于 2014-12-10T13:12:22.620 回答