Hello Tony! Thanks again. I do have some follow-up questions.
On Tue, Jun 26, 2012 at 12:28 PM, Tony Rietwyk <t...@rightsoft.com.au> wrote: > Hi Frank, > > I haven't used QItemEditorFactory. My reading of the docs suggests this > only applies if all of your strings are to be edited via the same combo. > None of the interfaces include a QModelIndex, so logically it can't be used > to provide different editors for different columns. Yes, I was kind of worried about that. In my case my views and models are associated with one another one to one. (That is, I don't have more than one view connected to the same model.) All of the fields in a given column of a view will use the same list of items in the combo box, but different columns will have different lists of items. So whether I do it with an editor or a delegate, I need to be able to have the editor and/or delegate depend on the column. > I think that means you will need to provide a QStyledItemDelegate override. > For a given view, you can use just one item delegate for all non-standard > columns, or have separate delegates for different columns (or rows). In this scheme I would have different (instances of the) delegates for different columns. Makes sense. > I > suggest that you load up the strings from the database only once, and store > them in the delegate. Then you override createEditor to create the combo > box, and add the pre-loaded items. This part I think I understand. > Note that delegates don't have to be specific to a particular view. Here's where I don't understand how things work. Is a delegate associated with a view or a model? I would think with the view because delegates seem to do "view" kinds of things -- display and UI interaction, rather than "model" things -- data. In my specific case of a QTableView, is a delegate associated with the view, with a cell in the view, or with a row or column of the view? Is the delegate that is associated with the view (or some part thereof) a specific instance of a delegate class, or is it a class (i.e., not an instance) that the machinery under the hood somehow instantiates automatically, as needed? And how, specifically, do I associate a delegate with a view (or a specific part of a view)? Let's say I derive my custom combo-box delegate from QStyledDelegate (along the lines of your TSpinBoxDelegate example, below). Then I instantiate my custom delegate and load up that specific instance with the desired items for its combo box. How to I attach that instance of that delegate to a specific column of one of my QTableViews? That's the part I'm fuzzy on. > Here is > one that I use whenever I have a column of ints with a range: > > class TSpinBoxDelegate : public QStyledItemDelegate > { > Q_OBJECT > > private: > int minValue; > int maxValue; > > public: > TSpinBoxDelegate(int min, int max, QObject *parent = 0); > > QWidget *createEditor( > QWidget *parent, > const QStyleOptionViewItem &option, > const QModelIndex &index) const; > }; > > ................ > > TSpinBoxDelegate::TSpinBoxDelegate(int min, int max, QObject *parent) : > QStyledItemDelegate(parent) > { > minValue = min; > maxValue = max; > } > > > QWidget *TSpinBoxDelegate::createEditor( > QWidget *parent, > const QStyleOptionViewItem &option, > const QModelIndex &index) const > { > Q_UNUSED( option ); > Q_UNUSED( index ); > > QSpinBox *editor = new QSpinBox(parent); > editor->setMinimum( minValue ); > editor->setMaximum( maxValue ); > return editor; > } This makes sense. I think I'm clear on how to implement a custom delegate -- I just don't know what to do with it after I have it. > Hope that helps, Yes, thank you. > Tony. Best. K. Frank _______________________________________________ Interest mailing list Interest@qt-project.org http://lists.qt-project.org/mailman/listinfo/interest