我正在研究Qt应用程序(用C ++编写)。没有appyling任何样式,我的菜单看起来像这样:
我希望它看起来像这样:
我如何实现这一目标?使用qss还是以编程方式?
我已经尝试过这个,没有成功:
menu->addAction(tr("Add"), this, SLOT(CreateNewWaypoint()))->setIconVisibleInMenu(false);
需要Qt4.8和Qt5的答案才能获得全额赏金!
答案 0 :(得分:2)
解决问题的一种方法是使用QProxyStyle:
customstyle.h
#ifndef CUSTOMSTYLE_H
#define CUSTOMSTYLE_H
#include <QProxyStyle>
#include <QStyleOptionMenuItem>
class CustomStyle : public QProxyStyle{
public:
using QProxyStyle::QProxyStyle;
void drawControl(ControlElement element, const QStyleOption *opt, QPainter *p, const QWidget *w) const override
{
if(element == QStyle::CE_MenuItem){
QStyleOptionMenuItem myMenuOption;
const QStyleOptionMenuItem *menuOption =
qstyleoption_cast<const QStyleOptionMenuItem *>(opt);
if (menuOption) {
const int width = pixelMetric(PM_SmallIconSize)+6;
myMenuOption = *menuOption;
QRect r(myMenuOption.rect);
r.setLeft(-width);
myMenuOption.rect = r;
}
QProxyStyle::drawControl(element, &myMenuOption, p, w);
return;
}
QProxyStyle::drawControl(element, opt, p, w);
}
};
#endif // CUSTOMSTYLE_H
然后将其安装在QApplication
中:
QApplication a(argc, argv);
QApplication::setStyle(new CustomStyle);
答案 1 :(得分:1)
您可以通过播放其样式表来影响菜单的显示方式。使用示例代码,您可以执行以下操作:
menu.setStyleSheet("QMenu::item {"
"padding: 2px 5px 2px 2px;"
"}"
"QMenu::item:selected {"
"background-color: rgb(0, 85, 127);"
"color: rgb(255, 255, 255);"
"}");
请注意padding属性,该属性设置菜单项矩形的偏移量。