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 Monday, 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
  • 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.
  • M mrjj
    29 Aug 2016, 07:08

    @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 29 Aug 2016, 07:17 last edited by
    #20

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

    for (int row = 0; row < 4; ++row)
    
    S 1 Reply Last reply 29 Aug 2016, 09:10
    1
    • J Jan-Willem
      29 Aug 2016, 07:17

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

      for (int row = 0; row < 4; ++row)
      
      S Offline
      S Offline
      srikanth
      wrote on 29 Aug 2016, 09:10 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 29 Aug 2016, 09:49 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);
        }
        
        S 1 Reply Last reply 29 Aug 2016, 10:02
        2
        • J Jan-Willem
          29 Aug 2016, 09:49

          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);
          }
          
          S Offline
          S Offline
          srikanth
          wrote on 29 Aug 2016, 10:02 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 29 Aug 2016, 10:27 last edited by
            #24

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

            S 1 Reply Last reply 29 Aug 2016, 10:38
            0
            • J Jan-Willem
              29 Aug 2016, 10:27

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

              S Offline
              S Offline
              srikanth
              wrote on 29 Aug 2016, 10:38 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 29 Aug 2016, 10:49 last edited by
                #26

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

                S 1 Reply Last reply 29 Aug 2016, 10:57
                0
                • J Jan-Willem
                  29 Aug 2016, 10:49

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

                  S Offline
                  S Offline
                  srikanth
                  wrote on 29 Aug 2016, 10:57 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 29 Aug 2016, 12:29 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

                    S 1 Reply Last reply 30 Aug 2016, 05:20
                    3
                    • J Jan-Willem
                      29 Aug 2016, 12:29

                      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

                      S Offline
                      S Offline
                      srikanth
                      wrote on 30 Aug 2016, 05:20 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 30 Aug 2016, 17:28 last edited by
                        #30

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

                        1 Reply Last reply
                        0

                        29/30

                        30 Aug 2016, 05:20

                        • Login

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