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.1k 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.
  • 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
                • J Offline
                  J Offline
                  Jan-Willem
                  wrote on last edited by
                  #24

                  The comDel is assigned to the entire column at index 0 with table->setItemDelegateForColumn(0, comDel).

                  srikanthS 1 Reply Last reply
                  0
                  • J Jan-Willem

                    The comDel is assigned to the entire column at index 0 with table->setItemDelegateForColumn(0, comDel).

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

                    @Jan-Willem but that delegate is not assigned to columns of table widget .

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

                      Just for my curiosity?
                      Which version of Qt are you using?

                      srikanthS 1 Reply Last reply
                      0
                      • J Jan-Willem

                        Just for my curiosity?
                        Which version of Qt are you using?

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

                        @Jan-Willem qt 4.8.3 on Visual Studio 2010

                        and my code looks 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;
                        	//ComboBoxDelegate comDel;
                        	int newrow =table->rowCount();
                        	int newcol =table->columnCount();
                        
                        
                        	SpinBoxDelegate *sdelegate = new SpinBoxDelegate ();
                        	ComboBoxDelegate * comDel = new ComboBoxDelegate ();
                        
                        	 for (int row = 0; row < 1; ++row) {
                                       for (int col = 0; col < 3; ++col) {
                        				 
                                             QModelIndex index = model.index(row, col, QModelIndex());
                                             model.setData(index, QVariant((row + 1) * (col + 1)));
                        	table->setItemDelegateForColumn( newcol, comDel);
                        			   }
                          
                        	 }
                        	/*for (int row = 0; row < 4; ++row)
                        	{
                        table->setItemDelegateForColumn( 2, &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);
                        }
                        
                        1 Reply Last reply
                        0
                        • J Offline
                          J Offline
                          Jan-Willem
                          wrote on last edited by
                          #28

                          Alright. Frankly I think you are making things more difficult than they have to be.

                          First of all you shouldn't set the columndelegate inside the for-statement, since you set it multiple times for no reason. Once will do for the entire column, so do it before or after the for-statement.

                          Second, you create a QStandardItemModel and use it with a QTabelWidget. A QTableWidget has it's own internal model.
                          The QModelIndex returned by model.index(row, col, QModelIndex()) is not in your table, but in your QStandardItemModel.

                          Perhaps you should read this first: Model/View Programming

                          srikanthS 1 Reply Last reply
                          3
                          • J Jan-Willem

                            Alright. Frankly I think you are making things more difficult than they have to be.

                            First of all you shouldn't set the columndelegate inside the for-statement, since you set it multiple times for no reason. Once will do for the entire column, so do it before or after the for-statement.

                            Second, you create a QStandardItemModel and use it with a QTabelWidget. A QTableWidget has it's own internal model.
                            The QModelIndex returned by model.index(row, col, QModelIndex()) is not in your table, but in your QStandardItemModel.

                            Perhaps you should read this first: Model/View Programming

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

                            @Jan-Willem @mrjj Thank you very much. problem is solved. your right am making things difficult , thanks for your advice it makes me to keen observe of my code and solve , Thanks a lot.
                            Can't believe that there is people who spend their time for such noob as me. Thank you again.

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

                              Glad it works so far.
                              Good luck with the rest.

                              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