我正在尝试使用Qt Designer向我的QMenu添加一个图标,但是我意识到当我的图标被添加时,我的文本消失了。有什么方法可以在文本旁边显示我的图标吗?
Qt 4 不支持它,也许它在 Qt5 中我没有检查过。在设计器本身中,您无能为力。在代码中,一个选项是自定义样式以绘制图标和文本:- 尺寸来自 QStyle 的内容::CT_MenuBarItem- QStyle的绘制控件::CE_MenuBarItem- 绘制自定义控件 QStyleOptionMenuItem
默认情况下不支持此操作,主要是因为它通常不是您希望在此处实现的操作。当然,您始终可以使用包含文本的图像,但这也是黑客行为,除非您动态绘制图像,然后稍后加载它。尽管即使这样也会是相当多的工作。
为了做到这一点,你需要稍微摆弄一下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如何将自定义小部件插入工具栏和菜单栏中。我自己从未在任何严肃的项目中使用它,但请注意可能会有所帮助。