Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

customContextMenu одновременно для нескольких узлов QTreeWidgetItem



  • Здравствуйте
    Есть проблема с вызовом.

    tree->setContextMenuPolicy(Qt::CustomContextMenu );
    connect(tree, SIGNAL(customContextMenuRequested(const QPoint&)), this, SLOT(treeWidget_customContextMenuRequested(const QPoint&)));
    /* добавление всех элементов
    */
    
    Здесь по CTRL активируется множественный выбор
    void MainWindow::keyPressEvent(QKeyEvent *event)
    {
        if (ui->treeWidget->currentItem()!=NULL)
        {
        if(event->modifiers().testFlag(Qt::ControlModifier))
        {
             ui->treeWidget->setSelectionMode(QAbstractItemView::ExtendedSelection);
        }
        }
    }
    

    Здесь он обрубается

    void MainWindow::keyReleaseEvent(QKeyEvent *event)
    {
             ui->treeWidget->setSelectionMode(QAbstractItemView::SingleSelection);
    }
    
    
    void MainWindow::treeWidget_customContextMenuRequested(const QPoint &pos)
    {
         QTreeWidgetItem *item = ui->treeWidget->itemAt(pos);
         QMenu *menu=new QMenu(this);
         if (item->data(0, Qt::UserRole)=="well")
         {
         menu->addAction(QIcon(".."), QString("Action"), this, SLOT(copy()));
         menu->addAction(QIcon(".."), QString("Count"), this, SLOT(copy()));
         }
    menu->exec(ui->treeWidget->viewport()->mapToGlobal(pos));
    }
    

    Если по умолчанию делать MultiSelection, то меню вызывается сразу для всех, как и надо
    Но надо именно с использованием CTRL, а с ним видится только один выбранный элемент



  • Удалось исправить
    Просто убрал весь KeyReleaseEvent
    Теперь видится множественный selection


Log in to reply