Uploaded image for project: 'Qt'
  1. Qt
  2. QTBUG-124524

QMenuBar with style override submenu all white in dark mode and crash

    XMLWordPrintable

Details

    • Bug
    • Resolution: Unresolved
    • P1: Critical
    • None
    • 6.7.0
    • GUI: Menus, Widgets: Styles
    • None
    • Windows 11, MinGW-w64, Linux x86_64
    • Windows

    Description

      There is an issue using style override and QMenuBar on Windows 11.

      In my case I used fusion style for QApplication and then windows11 style for menus and submenus.

      In dark mode the QMenu are completely white. Applying windows11 style on submenu with weighty menu crashes.

      Windows 11, mingw64 cross-compiled bin on Linux, Qt 6.7.0

      An example, please note, this example does not crash.

      #include <QApplication>
      #include <QStyle>
      #include <QStyleFactory>
      #include <QWidget>
      #include <QGridLayout>
      #include <QMenuBar>
      
      int main(int argc, char *argv[])
      {
          QApplication *app = new QApplication(argc, argv);
      
          // case use  override style to fusion
          {
              QStyle *style = QStyleFactory::create("fusion");
              QApplication::setStyle(style);
          }
      
          QWidget *widget = new QWidget;
          widget->setWindowTitle("QMenuBar QMenu Win11 test");
          widget->setMinimumSize(640, 480);
      
          QGridLayout *frm = new QGridLayout(widget);
      
          // case use  native menu bar
          QMenuBar *menubar = new QMenuBar();
          menubar->setNativeMenuBar(true);
      #ifdef Q_OS_WIN
          {
              QStyle *style = QStyleFactory::create("windows11");
              menubar->setStyle(style);
          }
      #endif
          frm->setMenuBar(menubar);
      
          // issue  broken menu  is all white in dark mode
          QMenu *menu = new QMenu(menubar);
          menu->setTitle("Menu");
      #ifdef Q_OS_WIN
          {
              QStyle *style = QStyleFactory::create("windows11");
              menu->setStyle(style);
          }
      #endif
          menubar->addMenu(menu);
      
          {
              QAction *action = new QAction(menu);
              action->setText("Item 1");
              menu->addAction(action);
          }
          {
              QAction *action = new QAction(menu);
              action->setText("Item 2");
              menu->addAction(action);
          }
      
          // issue  CRASH
          // note   not reproducible with this example
          QMenu *submenu = new QMenu(menu);
          submenu->setTitle("Submenu");
      #ifdef Q_OS_WIN
          {
              QStyle *style = QStyleFactory::create("windows11");
              submenu->setStyle(style);
          }
      #endif
          menu->addMenu(submenu);
      
          {
              QAction *action = new QAction(submenu);
              action->setText("Item 1");
              submenu->addAction(action);
          }
          {
              QAction *action = new QAction(submenu);
              action->setText("Item 2");
              submenu->addAction(action);
          }
      
          frm->addWidget(new QWidget());
          widget->setLayout(frm);
      
          widget->show();
      
          return app->exec();
      }

      👋

      Attachments

        For Gerrit Dashboard: QTBUG-124524
        # Subject Branch Project Status CR V

        Activity

          People

            wladimir.leuschner Wladimir Leuschner
            ctlcltd Leonardo Laureti
            Votes:
            0 Vote for this issue
            Watchers:
            4 Start watching this issue

            Dates

              Created:
              Updated:

              Gerrit Reviews

                There is 1 open Gerrit change