Clearing a QMenu while open toggles visibility

  • I found a weird behavior with context menus. When I clear it, it toggles visibility.

    Create a Qt desktop app and a window with a tree view. Insert the following:

    MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow)
    void MainWindow::on_treeView_customContextMenuRequested(const QPoint &pos)
        QMenu *m = new QMenu();
        QTimer t;
        connect(&t, &QTimer::timeout, this, [=](){

    When I now right-click into the tree view, my context menu opens (top, left!), and with each execution of the timer, the context menu gets invisible, and visible again, and so on.

    Note: Although it effectively triggers visibility, it doesn't in the data structures. In my real program, I can trigger the actions by clicking on the area nevertheless.

    I'm not sure if I should report it too fast. I suspect it might depend on some part of my environment (Qt version, KDE, Ubuntu, GPU, whatever, ...). It looks so low-level... Can you reproduce it? Or, is it okay to report it directly without further checks (sorry for my stupid question ;) )?

  • Lifetime Qt Champion

    Hi and welcome to devnet,

    Can you give more details about your environment ?

  • Qt Champions 2016

    It was easy to test so i did it on win 10/Qt.57 vs 2015
    I did see some strange flashing so i tried the following

    connect(&t, &QTimer::timeout, this, = {
    m->setUpdatesEnabled(false) ;
    m->setUpdatesEnabled(true) ;
    Which seems to reduce it a lot.

  • @SGaist Hi, thank you! It's a kubuntu 17.04 (with its Qt 5.7.1), amdgpu gpu driver.

  • @mrjj Okay, then it's more specific. The setUpdatesEnabled calls haven't changed the behavior here.

Log in to reply