Установка таблицы стилей в QMenu заставляет текст раздела исчезать - PullRequest
0 голосов
/ 08 мая 2020

Я хочу стилизовать 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"

, где я установил таблицу стилей, как описано в учебнике . Результат меню:

enter image description here

На изображении видно, что текст QMenu::addSection не отображается. Очевидно, что если я не установил таблицу стилей, текст будет там:

enter image description here

По моему опыту, подобные вещи обычно вам чего-то не хватает в таблице стилей, но я не смог найти, какой из них отсутствует (я перепробовал весь список в уже упомянутом руководстве). Более того, я безуспешно пытался использовать "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());

enter image description here

Кто-нибудь знает, как использовать таблицу стилей таким образом, чтобы текст раздела по-прежнему отображался?

...