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 Update on Tuesday, May 27th 2025

how can i get Delegate for QTableWidget?

Scheduled Pinned Locked Moved Solved General and Desktop
qtablewidgetqmouseevent
30 Posts 4 Posters 15.9k 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 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