Я хочу стилизовать QMenu с помощью таблицы стилей. Для этого я создал небольшой пример:
#include <QApplication>
#include <QContextMenuEvent>
#include <QMenu>
#include <QWidget>
class CustomWidget : public QWidget
{
Q_OBJECT
public:
CustomWidget(QWidget* parent = nullptr) : QWidget(parent)
{
setContextMenuPolicy(Qt::DefaultContextMenu);
}
virtual QSize sizeHint() const override
{
return QSize(150, 100);
}
protected:
virtual void contextMenuEvent(QContextMenuEvent* event) override
{
// Create menu
QMenu menu(this);
menu.setStyleSheet("QMenu {"
"background-color: #ABABAB;"
"border: 1px solid black;"
"}"
"QMenu::item {"
"background-color: transparent;"
"}"
"QMenu::item:selected {"
"background-color: #654321;"
"}");
menu.addAction(new QAction("Action 1", this));
menu.addSection("Section");
menu.addAction(new QAction("Action 2", this));
menu.exec(event->globalPos());
}
};
int main(int argc, char** argv)
{
QApplication app(argc, argv);
CustomWidget w;
w.show();
return app.exec();
}
#include "test_style.moc"
, где я установил таблицу стилей, как описано в учебнике . Результат меню:
На изображении видно, что текст QMenu::addSection
не отображается. Очевидно, что если я не установил таблицу стилей, текст будет там:
По моему опыту, подобные вещи обычно вам чего-то не хватает в таблице стилей, но я не смог найти, какой из них отсутствует (я перепробовал весь список в уже упомянутом руководстве). Более того, я безуспешно пытался использовать "QMenu::separator"
:
// Create menu
QMenu menu(this);
menu.setStyleSheet("QMenu {"
"background-color: #ABABAB;"
"border: 1px solid black;"
"}"
"QMenu::separator{"
"height:1px;"
"background:blue;"
"margin-left:5px;"
"margin-right:5px;"
"}"
"QMenu::item {"
"background-color: transparent;"
"}"
"QMenu::item:selected {"
"background-color: #654321;"
"}");
menu.addAction(new QAction("Action 1", this));
menu.addSection("Section");
menu.addAction(new QAction("Action 2", this));
menu.exec(event->globalPos());
Кто-нибудь знает, как использовать таблицу стилей таким образом, чтобы текст раздела по-прежнему отображался?