Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Qt set a custom widget inside a QTableView cell

Tags:

c++

qt

qtableview

I want-to put-a customed-widget into the cell of QTableView. The Widget can-be a QPushButton, a checkBox or something else. I've tried following methods, but no-one satisfies me:

  1. Use delegate. This strategy can paint widget, but cant-be a customed widget, and cant interact.
  2. Use QTableView::setIndexWidget(). Using this strategy, the customed-widget covers the cell wholly & absolutely, delegate binded to QTableView not working, which means a-double-click() wont make Edit operation on-the cell.

Note that the function is stand-alone, like a plugin. So I cant do following things.

  1. Inherit from QTableView. I can only get a-pointer-variable binded with QTableView----only an object of QTableView.
  2. Inherit from any-model. The model is control by other user, the programmer writing model shouldn't and can't just use my-customed model.

The problem is really complex and too-many constraints restrict the design.

like image 905
Nick.Rhan Avatar asked Oct 23 '25 07:10

Nick.Rhan


2 Answers

You can't do this without a delegate if you want to use model/view to contain the data of your widget. Even worse, if you try to do this anyway, you'll significantly slow down your program when the number of elements is very high, because every widget will be involved in the event loop. This is NOT what you want. You want to involve only the widgets that are visible to the user.

Considering reading this for more explanation.

like image 132
The Quantum Physicist Avatar answered Oct 25 '25 20:10

The Quantum Physicist


Thanks for all of you contributing to this question, I've found a way to solve this problem. It is solved as the "original thought", which is just to draw a QToolButton on the tableView, using the QModelIndex. Through QModelIndex, I can get the geomertry location where I can draw any QWidget. However, this method is really complex, for I have to maintain the changes of QModelIndex, like removeColumns and insertColumns.

Another problem is concerned that I have to distinguish between hide & delete columns or rows. And I think I should post an another new question for help. Thanks again.

like image 38
Nick.Rhan Avatar answered Oct 25 '25 21:10

Nick.Rhan



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!