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. how can i get Delegate for QTableWidget?
Forum Updated to NodeBB v4.3 + New Features

how can i get Delegate for QTableWidget?

Scheduled Pinned Locked Moved Solved General and Desktop
qtablewidgetqmouseevent
30 Posts 4 Posters 16.0k Views 2 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.
  • srikanthS srikanth

    @mrjj ComboBoxDelegate comDel; and SpinBoxDelegate sdelegate;
    are the class objects , am calling here to execute on those objects .

    mrjjM Offline
    mrjjM Offline
    mrjj
    Lifetime Qt Champion
    wrote on last edited by mrjj
    #4

    @srikanth
    But you set them to the view and
    void Notepad::test()
    {
    ..
    ComboBoxDelegate comDel;; <<< lives here. not in class

    Will die as soon as test() is executed and the view will point to invalid object.

    here u give it address of this local variable that will be deleted soon.
    table->setItemDelegateForColumn( column, &comDel);

    So it does NOT look right to me :)

    srikanthS 1 Reply Last reply
    0
    • mrjjM mrjj

      @srikanth
      But you set them to the view and
      void Notepad::test()
      {
      ..
      ComboBoxDelegate comDel;; <<< lives here. not in class

      Will die as soon as test() is executed and the view will point to invalid object.

      here u give it address of this local variable that will be deleted soon.
      table->setItemDelegateForColumn( column, &comDel);

      So it does NOT look right to me :)

      srikanthS Offline
      srikanthS Offline
      srikanth
      wrote on last edited by
      #5

      @mrjj so what can i do ta add delegates , actually Notepad class is to create a window with tablewidget contains 3 columns and 1 row,am using mouse event to add rows and delete rows by using ActinEvent methods, up to here everything is doing good, now i am trying to add combobox delegate to 1st column and spinbox delegate to 2nd column so am not able to do please give me the solution please...

      mrjjM 1 Reply Last reply
      0
      • srikanthS srikanth

        @mrjj so what can i do ta add delegates , actually Notepad class is to create a window with tablewidget contains 3 columns and 1 row,am using mouse event to add rows and delete rows by using ActinEvent methods, up to here everything is doing good, now i am trying to add combobox delegate to 1st column and spinbox delegate to 2nd column so am not able to do please give me the solution please...

        mrjjM Offline
        mrjjM Offline
        mrjj
        Lifetime Qt Champion
        wrote on last edited by
        #6

        @srikanth

        you just new them instead :)
        ComboBoxDelegate * comDel = new ComboBoxDelegate ();
        Rest is 100% the same.
        except no & in
        table->setItemDelegateForColumn( column, &comDel);
        -->
        table->setItemDelegateForColumn( column, comDel);

        srikanthS VRoninV 2 Replies Last reply
        1
        • mrjjM mrjj

          @srikanth

          you just new them instead :)
          ComboBoxDelegate * comDel = new ComboBoxDelegate ();
          Rest is 100% the same.
          except no & in
          table->setItemDelegateForColumn( column, &comDel);
          -->
          table->setItemDelegateForColumn( column, comDel);

          srikanthS Offline
          srikanthS Offline
          srikanth
          wrote on last edited by
          #7

          @mrjj but again same problem raising.

          mrjjM 1 Reply Last reply
          0
          • mrjjM mrjj

            @srikanth

            you just new them instead :)
            ComboBoxDelegate * comDel = new ComboBoxDelegate ();
            Rest is 100% the same.
            except no & in
            table->setItemDelegateForColumn( column, &comDel);
            -->
            table->setItemDelegateForColumn( column, comDel);

            VRoninV Offline
            VRoninV Offline
            VRonin
            wrote on last edited by
            #8

            @mrjj The view does not take ownership of the delegate so you have to give a parent to comDel or it will leak

            "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
            ~Napoleon Bonaparte

            On a crusade to banish setIndexWidget() from the holy land of Qt

            mrjjM 1 Reply Last reply
            1
            • VRoninV VRonin

              @mrjj The view does not take ownership of the delegate so you have to give a parent to comDel or it will leak

              mrjjM Offline
              mrjjM Offline
              mrjj
              Lifetime Qt Champion
              wrote on last edited by mrjj
              #9

              @VRonin
              Thanks. I thought setItemDelegateForColumn would - so thats a very good point;
              (Docs clearly states it do not so assumption is the mother of all fups :)

              1 Reply Last reply
              1
              • srikanthS srikanth

                @mrjj but again same problem raising.

                mrjjM Offline
                mrjjM Offline
                mrjj
                Lifetime Qt Champion
                wrote on last edited by
                #10

                @srikanth
                Hi
                You changed to use new?
                So what is the exact issue?
                No deletegate is shown, or ?

                srikanthS 1 Reply Last reply
                0
                • mrjjM mrjj

                  @srikanth
                  Hi
                  You changed to use new?
                  So what is the exact issue?
                  No deletegate is shown, or ?

                  srikanthS Offline
                  srikanthS Offline
                  srikanth
                  wrote on last edited by
                  #11

                  @mrjj the error is showing like this "Unhandled exception at 0x778e3560 in add or remove colmns.exe:0xC00000FD:Stack overflow. "
                  and i make changes like this as you said

                  void Notepad::test() 
                  {	
                  	QTableWidgetItem* tableItem = new QTableWidgetItem();
                  	
                  	table->setRowCount(1);
                  	table->setColumnCount(3);
                  	table->setItem(0,0,new QTableWidgetItem());
                  	table->setItem(0,1,new QTableWidgetItem());
                  	table->setItem(0,2,new QTableWidgetItem());
                  
                  	table->setMouseTracking(true);
                      table->viewport()->setMouseTracking(true);
                      table->installEventFilter(this);
                      table->viewport()->installEventFilter(this);
                  
                      table->setSelectionBehavior(QAbstractItemView::SelectRows);
                      table->setSelectionMode(QAbstractItemView::SingleSelection);
                  	
                  	QStandardItemModel model((table->rowCount()),(table->columnCount()));
                  	//SpinBoxDelegate sdelegate;
                  	SpinBoxDelegate *sdelegate = new SpinBoxDelegate ();
                  	ComboBoxDelegate * comDel = new ComboBoxDelegate ();
                  	//ComboBoxDelegate comDel;
                  	 for (int row = 0; row < 4; ++row)
                  	{
                  		QWidget *parent;
                  		QStyleOptionViewItem option;
                          for (int column = 0; column < 1; ++column)
                  		{
                  			
                  			table->setItemDelegateForColumn( column, comDel);
                  			QModelIndex index = model.index(row, column, QModelIndex());
                              model.setData(index, QVariant((row + 1) * (column + 1)));
                          }
                  		for (int column = 1; column < 2; ++column) 
                  		{
                  		
                  		table->setItemDelegateForColumn( column, sdelegate  );
                  		QModelIndex index = model.index(row, column, QModelIndex());
                          model.setData(index, QVariant((row + 1) * (column + 1)));
                  		}
                  	}
                  
                  
                  	table->setHorizontalHeaderItem(0, new QTableWidgetItem("combobox"));
                  	table->setHorizontalHeaderItem(1, new QTableWidgetItem("spinbox"));
                  	table->setHorizontalHeaderItem(2, new QTableWidgetItem("lineEdit"));
                  	tableItem->setFlags(tableItem->flags() ^ Qt::ItemIsEditable);
                  	table->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
                  	setCentralWidget(table);
                  	
                  }
                  
                  1 Reply Last reply
                  0
                  • mrjjM Offline
                    mrjjM Offline
                    mrjj
                    Lifetime Qt Champion
                    wrote on last edited by
                    #12

                    Hi
                    That is a bug in your code, most likely.

                    Please use debugger and single step to find the line
                    that gives it.

                    Its very hard to guess by looking at code.

                    You get a Stack overflow - which often is a infinite loop or something like that.

                    srikanthS 2 Replies Last reply
                    1
                    • mrjjM mrjj

                      Hi
                      That is a bug in your code, most likely.

                      Please use debugger and single step to find the line
                      that gives it.

                      Its very hard to guess by looking at code.

                      You get a Stack overflow - which often is a infinite loop or something like that.

                      srikanthS Offline
                      srikanthS Offline
                      srikanth
                      wrote on last edited by
                      #13
                      This post is deleted!
                      1 Reply Last reply
                      0
                      • mrjjM mrjj

                        Hi
                        That is a bug in your code, most likely.

                        Please use debugger and single step to find the line
                        that gives it.

                        Its very hard to guess by looking at code.

                        You get a Stack overflow - which often is a infinite loop or something like that.

                        srikanthS Offline
                        srikanthS Offline
                        srikanth
                        wrote on last edited by
                        #14

                        @mrjj 0_1472446858318_Untitled.jpg

                        am getting error like this am not able to find where the error is , please help me.

                        mrjjM 1 Reply Last reply
                        0
                        • srikanthS srikanth

                          @mrjj 0_1472446858318_Untitled.jpg

                          am getting error like this am not able to find where the error is , please help me.

                          mrjjM Offline
                          mrjjM Offline
                          mrjj
                          Lifetime Qt Champion
                          wrote on last edited by
                          #15

                          @srikanth
                          Most likely in your delegate.
                          You can insert break point in each function and single step when you reach it.
                          That way you can find where it crashes.
                          No way i can just guess it, sadly.

                          if you think it crash in Notepad::test()
                          single step should find it.

                          srikanthS 1 Reply Last reply
                          0
                          • J Offline
                            J Offline
                            Jan-Willem
                            wrote on last edited by
                            #16

                            Just wondering, but it seems you add a columnDelegate for every row you pass through. If I'm not mistaken, you should add a columnDelegate just once for the entire column.

                            And you seem to use a for-statement for setting the columDelegate, while you only execute it once. That doesn't make sense to me.

                            I'm not sure if this would fix anything of your problem, but I think you're code would benefit from it if you if you fixed this.

                            srikanthS 1 Reply Last reply
                            2
                            • mrjjM mrjj

                              @srikanth
                              Most likely in your delegate.
                              You can insert break point in each function and single step when you reach it.
                              That way you can find where it crashes.
                              No way i can just guess it, sadly.

                              if you think it crash in Notepad::test()
                              single step should find it.

                              srikanthS Offline
                              srikanthS Offline
                              srikanth
                              wrote on last edited by
                              #17

                              @mrjj i did debug by using break points, everything is working fine , in .cpp file up to return app.exec(); in main.cpp , here it is getting crash and showing this error.

                              mrjjM 1 Reply Last reply
                              1
                              • J Jan-Willem

                                Just wondering, but it seems you add a columnDelegate for every row you pass through. If I'm not mistaken, you should add a columnDelegate just once for the entire column.

                                And you seem to use a for-statement for setting the columDelegate, while you only execute it once. That doesn't make sense to me.

                                I'm not sure if this would fix anything of your problem, but I think you're code would benefit from it if you if you fixed this.

                                srikanthS Offline
                                srikanthS Offline
                                srikanth
                                wrote on last edited by
                                #18

                                @Jan-Willem thanks a lot the error is fix, when i put for loop in a comment , now how can i assign ComboBoxDelegate for 1st column and SpinBoxDelegate to 2nd cloumn.

                                1 Reply Last reply
                                0
                                • srikanthS srikanth

                                  @mrjj i did debug by using break points, everything is working fine , in .cpp file up to return app.exec(); in main.cpp , here it is getting crash and showing this error.

                                  mrjjM Offline
                                  mrjjM Offline
                                  mrjj
                                  Lifetime Qt Champion
                                  wrote on last edited by
                                  #19

                                  @srikanth
                                  hi
                                  Sounds like you crash when close down then/cleaning up.
                                  I think
                                  @Jan-Willem has a point of you setting multiple times.
                                  setItemDelegateForColumn( column, comDel);
                                  It might delete it multiple times.
                                  So please try set only once. (for test)

                                  J 1 Reply Last reply
                                  2
                                  • mrjjM mrjj

                                    @srikanth
                                    hi
                                    Sounds like you crash when close down then/cleaning up.
                                    I think
                                    @Jan-Willem has a point of you setting multiple times.
                                    setItemDelegateForColumn( column, comDel);
                                    It might delete it multiple times.
                                    So please try set only once. (for test)

                                    J Offline
                                    J Offline
                                    Jan-Willem
                                    wrote on last edited by
                                    #20

                                    In addidtion to @mrjj, I would suggest before or after the entire

                                    for (int row = 0; row < 4; ++row)
                                    
                                    srikanthS 1 Reply Last reply
                                    1
                                    • J Jan-Willem

                                      In addidtion to @mrjj, I would suggest before or after the entire

                                      for (int row = 0; row < 4; ++row)
                                      
                                      srikanthS Offline
                                      srikanthS Offline
                                      srikanth
                                      wrote on last edited by srikanth
                                      #21

                                      @Jan-Willem now i get clear idea this error is coming when am trying to insert a delegate into column , so i want to know is there any thing wrong to insert delegates into the tablewidget, please help me to get out from this task . @mrjj

                                      1 Reply Last reply
                                      0
                                      • J Offline
                                        J Offline
                                        Jan-Willem
                                        wrote on last edited by
                                        #22

                                        How does your code look like now, something like this?

                                        void Notepad::test() 
                                        {	
                                        	QTableWidgetItem* tableItem = new QTableWidgetItem();
                                        	
                                        	table->setRowCount(1);
                                        	table->setColumnCount(3);
                                        	table->setItem(0,0,new QTableWidgetItem());
                                        	table->setItem(0,1,new QTableWidgetItem());
                                        	table->setItem(0,2,new QTableWidgetItem());
                                        
                                        	table->setMouseTracking(true);
                                                table->viewport()->setMouseTracking(true);
                                                table->installEventFilter(this);
                                                table->viewport()->installEventFilter(this);
                                        
                                                table->setSelectionBehavior(QAbstractItemView::SelectRows);
                                                table->setSelectionMode(QAbstractItemView::SingleSelection);
                                        	
                                        	QStandardItemModel model((table->rowCount()),(table->columnCount()));
                                        	SpinBoxDelegate *sdelegate = new SpinBoxDelegate ();
                                        	ComboBoxDelegate * comDel = new ComboBoxDelegate ();
                                        
                                        	 for (int row = 0; row < 4; ++row) {
                                                       for (int col = 0; col < 2; ++col) {
                                                             QModelIndex index = model.index(row, col, QModelIndex());
                                                             model.setData(index, QVariant((row + 1) * (col + 1)));
                                        	}
                                                table->setItemDelegateForColumn(0,  comDel);
                                                table->setItemDelegateForColumn(1, sdelegate);
                                        
                                        	table->setHorizontalHeaderItem(0, new QTableWidgetItem("combobox"));
                                        	table->setHorizontalHeaderItem(1, new QTableWidgetItem("spinbox"));
                                        	table->setHorizontalHeaderItem(2, new QTableWidgetItem("lineEdit"));
                                        	tableItem->setFlags(tableItem->flags() ^ Qt::ItemIsEditable);
                                        	table->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
                                        	setCentralWidget(table);
                                        }
                                        
                                        srikanthS 1 Reply Last reply
                                        2
                                        • J Jan-Willem

                                          How does your code look like now, something like this?

                                          void Notepad::test() 
                                          {	
                                          	QTableWidgetItem* tableItem = new QTableWidgetItem();
                                          	
                                          	table->setRowCount(1);
                                          	table->setColumnCount(3);
                                          	table->setItem(0,0,new QTableWidgetItem());
                                          	table->setItem(0,1,new QTableWidgetItem());
                                          	table->setItem(0,2,new QTableWidgetItem());
                                          
                                          	table->setMouseTracking(true);
                                                  table->viewport()->setMouseTracking(true);
                                                  table->installEventFilter(this);
                                                  table->viewport()->installEventFilter(this);
                                          
                                                  table->setSelectionBehavior(QAbstractItemView::SelectRows);
                                                  table->setSelectionMode(QAbstractItemView::SingleSelection);
                                          	
                                          	QStandardItemModel model((table->rowCount()),(table->columnCount()));
                                          	SpinBoxDelegate *sdelegate = new SpinBoxDelegate ();
                                          	ComboBoxDelegate * comDel = new ComboBoxDelegate ();
                                          
                                          	 for (int row = 0; row < 4; ++row) {
                                                         for (int col = 0; col < 2; ++col) {
                                                               QModelIndex index = model.index(row, col, QModelIndex());
                                                               model.setData(index, QVariant((row + 1) * (col + 1)));
                                          	}
                                                  table->setItemDelegateForColumn(0,  comDel);
                                                  table->setItemDelegateForColumn(1, sdelegate);
                                          
                                          	table->setHorizontalHeaderItem(0, new QTableWidgetItem("combobox"));
                                          	table->setHorizontalHeaderItem(1, new QTableWidgetItem("spinbox"));
                                          	table->setHorizontalHeaderItem(2, new QTableWidgetItem("lineEdit"));
                                          	tableItem->setFlags(tableItem->flags() ^ Qt::ItemIsEditable);
                                          	table->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
                                          	setCentralWidget(table);
                                          }
                                          
                                          srikanthS Offline
                                          srikanthS Offline
                                          srikanth
                                          wrote on last edited by
                                          #23

                                          @Jan-Willem yeah my code is like this only, but delegates are not assigning to the columns of table widget?

                                          1 Reply Last reply
                                          0

                                          • Login

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