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

customContextMenuRequested doesn't work on Android

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Unresolved
    • Icon: P4: Low P4: Low
    • None
    • 6.8
    • None
    • Android

      In the following example, long-pressing the background of the QMainWindow doesn't result in a context menu being displayed:

      #include <QtWidgets>
      
      int main(int argc, char *argv[])
      {
          QApplication app(argc, argv);
      
          QMainWindow mainWindow;
      
          QWidget *centralWidget = new QWidget;
      
          auto createLayout = [&mainWindow](QWidget *parent) -> QBoxLayout* {
              if (mainWindow.screen()->primaryOrientation() == Qt::LandscapeOrientation)
                  return new QHBoxLayout(parent);
              return new QVBoxLayout(parent);
          };
      
          QBoxLayout *mainLayout = createLayout(centralWidget);
          centralWidget->setLayout(mainLayout);
      
          // Set up the menu bar.
          auto *menuBarMenu = new QMenu("Menu bar menu", mainWindow.menuBar());
          QAction action1("Menu item 1", centralWidget);
          QAction action2("Menu item 2", centralWidget);
          QAction action3("Menu item 3", centralWidget);
          menuBarMenu->addAction(&action1);
          menuBarMenu->addAction(&action2);
          menuBarMenu->addAction(&action3);
          mainWindow.menuBar()->addMenu(menuBarMenu);
      
          // Set up the context menu.
          QMenu contextMenu("Context menu", centralWidget);
          contextMenu.addAction(&action1);
          contextMenu.addAction(&action2);
          contextMenu.addAction(&action3);
      
          mainWindow.setContextMenuPolicy(Qt::CustomContextMenu);
          QObject::connect(&mainWindow, &QWidget::customContextMenuRequested,
                           &mainWindow, [&contextMenu, &mainWindow](const QPoint &pos) {
                               contextMenu.exec(mainWindow.mapToGlobal(pos));
                           });
      
          // Useful for opening the menu on systems that apparently don't emit customContextMenuRequested,
          // like Android: https://bugreports.qt.io/browse/QTBUG-122732
          auto *openContextMenuButton = new QPushButton("Open", centralWidget);
          QObject::connect(openContextMenuButton, &QPushButton::clicked, [&contextMenu, &mainWindow, openContextMenuButton](){
              contextMenu.move(mainWindow.geometry().center());
              contextMenu.show();
          });
          mainLayout->addWidget(openContextMenuButton);
      
          mainWindow.setCentralWidget(centralWidget);
      
          mainWindow.resize(400, 400);
          mainWindow.show();
      
          return app.exec();
      }
      

      The same issue has been brought up elsewhere:

      If this shouldn't be supported, the limitation should be documented.

        No reviews matched the request. Check your Options in the drop-down menu of this sections header.

            qt.team.quick.subscriptions Qt Quick and Widgets Team
            mitch_curtis Mitch Curtis
            Votes:
            1 Vote for this issue
            Watchers:
            1 Start watching this issue

              Created:
              Updated:

                There are no open Gerrit changes