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

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

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Fixed
    • Icon: P1: Critical P1: Critical
    • 6.7.2, 6.8.0 FF
    • 6.7.0
    • GUI: Menus, Widgets: Styles
    • None
    • Windows 11, MinGW-w64, Linux x86_64
    • Windows
    • b7874f1fa (dev), bec8a58da (6.7)

      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();
      }

      👋

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

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

              Created:
              Updated:
              Resolved:

                There are no open Gerrit changes