Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. I want to right click the particular treewidgetitem..
Qt 6.11 is out! See what's new in the release blog

I want to right click the particular treewidgetitem..

Scheduled Pinned Locked Moved Solved General and Desktop
15 Posts 3 Posters 6.0k Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • K karti gesar

    treeWidget = new QTreeWidget(this);
    treeWidget->setContextMenuPolicy(Qt::ActionsContextMenu);
    treeWidget->setHeaderLabel("Display");

    Above code is what i used....for entire treewidget the right click appears...for me only for item right click should appear.....do you have any idea....

    RatzzR Offline
    RatzzR Offline
    Ratzz
    wrote on last edited by
    #2

    @karti-gesar

    use setContextMenuPolicy(Qt::CustomContextMenu) and connect customContextMenuRequested(QPoint) to your slot and accept only if index is valid.

    --Alles ist gut.

    1 Reply Last reply
    0
    • K Offline
      K Offline
      karti gesar
      wrote on last edited by
      #3

      k i will try

      1 Reply Last reply
      1
      • K Offline
        K Offline
        karti gesar
        wrote on last edited by
        #4

        treeWidget = new QTreeWidget(this);
        treeWidget->setGeometry(0,0,200,200);
        treeWidget->setContextMenuPolicy(Qt::CustomContextMenu);
        connect(treeWidget, SIGNAL(customContextMenuRequested(const QPoint&)),
        this, SLOT(ShowContextMenu(const QPoint&)));
        }

        void MainWindow::ShowContextMenu( const QPoint & pos )
        {

        QPoint globalPos = treeWidget->mapToGlobal(pos);
           // for QAbstractScrollArea and derived classes you would use:
           // QPoint globalPos = myWidget->viewport()->mapToGlobal(pos);
        
           QMenu myMenu;
           myMenu.addAction("Menu Item 1");
           // ...
        
           QAction* selectedItem = myMenu.exec(globalPos);
           if (selectedItem)
           {
               // something was chosen, do stuff
           }
           else
           {
               // nothing was chosen
           }
        

        }

        1 Reply Last reply
        1
        • K Offline
          K Offline
          karti gesar
          wrote on last edited by
          #5

          above code is what i used...still right click appear all area of the treewidget

          RatzzR 1 Reply Last reply
          1
          • K karti gesar

            above code is what i used...still right click appear all area of the treewidget

            RatzzR Offline
            RatzzR Offline
            Ratzz
            wrote on last edited by
            #6

            @karti-gesar
            something like this

                QModelIndex index = ui->treeWidget->indexAt(point);
                if(index .isValid())
                {
                 /// add actions here
                }

            --Alles ist gut.

            1 Reply Last reply
            1
            • K Offline
              K Offline
              karti gesar
              wrote on last edited by
              #7

              i don't know how to use this

              RatzzR 1 Reply Last reply
              1
              • K karti gesar

                i don't know how to use this

                RatzzR Offline
                RatzzR Offline
                Ratzz
                wrote on last edited by
                #8

                @karti-gesar
                This works for me
                //cons

                    ui->treeWidget->setContextMenuPolicy(Qt::CustomContextMenu);
                    connect(ui->treeWidget,SIGNAL(customContextMenuRequested(QPoint)),this,SLOT(goHere(QPoint)));
                

                //go here

                    QMenu* menu = new QMenu("Menu",ui->treeWidget);
                    QModelIndex index = ui->treeWidget->indexAt(point);
                    if(index.isValid())
                    {
                        QAction *myaction  = new QAction(QIcon(":/new/prefix1/Icons/action.png"),"action",this);
                        menu->addAction(myaction);
                        menu->exec((QCursor::pos()));
                    }

                --Alles ist gut.

                1 Reply Last reply
                2
                • K Offline
                  K Offline
                  karti gesar
                  wrote on last edited by
                  #9

                  ya it works ...but all the treewidget area getting right click

                  RatzzR 1 Reply Last reply
                  1
                  • K karti gesar

                    ya it works ...but all the treewidget area getting right click

                    RatzzR Offline
                    RatzzR Offline
                    Ratzz
                    wrote on last edited by
                    #10

                    @karti-gesar said:

                    but all the treewidget area getting right click

                    What do you mean?

                    Show me your code

                    --Alles ist gut.

                    1 Reply Last reply
                    0
                    • K Offline
                      K Offline
                      karti gesar
                      wrote on last edited by
                      #11

                      for particular item only i want right....but for entire widget it appears

                      1 Reply Last reply
                      1
                      • K Offline
                        K Offline
                        karti gesar
                        wrote on last edited by
                        #12

                        treeWidget = new QTreeWidget(this);

                        treeWidget->setContextMenuPolicy(Qt::ActionsContextMenu);
                          treeWidget->setHeaderLabel("Display");
                        
                        
                          //tree = new QTreeView(this);
                               // tree->setModel(treeWidget);
                        
                          //Cpp file:
                        

                        myAction = new QAction(tr("&Add Subprogram"), treeWidget);
                        connect(myAction, SIGNAL(triggered()), this, SLOT(mySlot()));
                        myAction1 = new QAction(tr("&Delete Subprogram"), treeWidget);
                        connect(myAction1, SIGNAL(triggered()), this, SLOT(deleteSubpgm()));
                        myAction2 = new QAction(tr("&AddProgram"), treeWidget);
                        connect(myAction2, SIGNAL(triggered()), this, SLOT(AddProgram()));
                        myAction3 = new QAction(tr("&DeleteProgram"), treeWidget);
                        connect(myAction3, SIGNAL(triggered()), this, SLOT(DeleteProgram()));
                        // Then add it to your treeWidget:
                        treeWidget->addAction(myAction);
                        treeWidget->addAction(myAction1);
                        treeWidget->addAction(myAction2);
                        treeWidget->addAction(myAction3);
                        prg1 = new QTreeWidgetItem(treeWidget);
                        prg1->setIcon(0,QIcon("C:/Users/skarthick.DART0/Downloads/clapperboard.png"));
                        prg1->setText(0, tr("Program1"));
                        }

                        void Dialog::mySlot()
                        {
                        qDebug()<<"ee";
                        osloItem = new QTreeWidgetItem(prg1);
                        static int i=1;
                        osloItem->setText(0, QString("Subprogram %1").arg(i));

                        i++;
                        if(i>=12)
                        {
                            QMessageBox msgBox;
                            msgBox.setText("no more to add.");
                            msgBox.exec();
                        }
                        

                        }

                        void Dialog::deleteSubpgm()
                        {
                        osloItem = treeWidget->currentItem();
                        if(osloItem)
                        delete osloItem->parent()->takeChild(osloItem->parent()->indexOfChild(osloItem));

                        }
                        void Dialog::AddProgram()
                        {
                        prg2 = new QTreeWidgetItem(treeWidget);
                        static int j=2;
                        prg2->setIcon(0,QIcon("C:/Users/skarthick.DART0/Downloads/clapperboard.png"));
                        prg2->setText(0, QString("program %2").arg(j));
                        j++;

                        }
                        void Dialog::DeleteProgram()
                        {
                        prg2= treeWidget->currentItem();
                        if(prg2)
                        {

                        delete prg2->parent();

                        }
                        }

                        RatzzR 1 Reply Last reply
                        1
                        • K karti gesar

                          treeWidget = new QTreeWidget(this);

                          treeWidget->setContextMenuPolicy(Qt::ActionsContextMenu);
                            treeWidget->setHeaderLabel("Display");
                          
                          
                            //tree = new QTreeView(this);
                                 // tree->setModel(treeWidget);
                          
                            //Cpp file:
                          

                          myAction = new QAction(tr("&Add Subprogram"), treeWidget);
                          connect(myAction, SIGNAL(triggered()), this, SLOT(mySlot()));
                          myAction1 = new QAction(tr("&Delete Subprogram"), treeWidget);
                          connect(myAction1, SIGNAL(triggered()), this, SLOT(deleteSubpgm()));
                          myAction2 = new QAction(tr("&AddProgram"), treeWidget);
                          connect(myAction2, SIGNAL(triggered()), this, SLOT(AddProgram()));
                          myAction3 = new QAction(tr("&DeleteProgram"), treeWidget);
                          connect(myAction3, SIGNAL(triggered()), this, SLOT(DeleteProgram()));
                          // Then add it to your treeWidget:
                          treeWidget->addAction(myAction);
                          treeWidget->addAction(myAction1);
                          treeWidget->addAction(myAction2);
                          treeWidget->addAction(myAction3);
                          prg1 = new QTreeWidgetItem(treeWidget);
                          prg1->setIcon(0,QIcon("C:/Users/skarthick.DART0/Downloads/clapperboard.png"));
                          prg1->setText(0, tr("Program1"));
                          }

                          void Dialog::mySlot()
                          {
                          qDebug()<<"ee";
                          osloItem = new QTreeWidgetItem(prg1);
                          static int i=1;
                          osloItem->setText(0, QString("Subprogram %1").arg(i));

                          i++;
                          if(i>=12)
                          {
                              QMessageBox msgBox;
                              msgBox.setText("no more to add.");
                              msgBox.exec();
                          }
                          

                          }

                          void Dialog::deleteSubpgm()
                          {
                          osloItem = treeWidget->currentItem();
                          if(osloItem)
                          delete osloItem->parent()->takeChild(osloItem->parent()->indexOfChild(osloItem));

                          }
                          void Dialog::AddProgram()
                          {
                          prg2 = new QTreeWidgetItem(treeWidget);
                          static int j=2;
                          prg2->setIcon(0,QIcon("C:/Users/skarthick.DART0/Downloads/clapperboard.png"));
                          prg2->setText(0, QString("program %2").arg(j));
                          j++;

                          }
                          void Dialog::DeleteProgram()
                          {
                          prg2= treeWidget->currentItem();
                          if(prg2)
                          {

                          delete prg2->parent();

                          }
                          }

                          RatzzR Offline
                          RatzzR Offline
                          Ratzz
                          wrote on last edited by
                          #13

                          @karti-gesar
                          I don't see any checking for valid index . i.e index.isValid() ??

                          --Alles ist gut.

                          1 Reply Last reply
                          1
                          • SGaistS Offline
                            SGaistS Offline
                            SGaist
                            Lifetime Qt Champion
                            wrote on last edited by
                            #14

                            Hi,

                            Like @Ratzz wrote, you should use Qt::CustomContextMenu not Qt::ActionsContextMenu.

                            The use of CustomContextMenu will trigger the customContextMenuRequested signal and you'll build your contextual menu in the slot connected to it.

                            Interested in AI ? www.idiap.ch
                            Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                            1 Reply Last reply
                            1
                            • K Offline
                              K Offline
                              karti gesar
                              wrote on last edited by
                              #15

                              i will try it,,,

                              1 Reply Last reply
                              1

                              • Login

                              • Login or register to search.
                              • First post
                                Last post
                              0
                              • Categories
                              • Recent
                              • Tags
                              • Popular
                              • Users
                              • Groups
                              • Search
                              • Get Qt Extensions
                              • Unsolved