This is correct. From the docs: Editable models need to implement setData <http://harmattan-dev.nokia.com/docs/library/html/qt4/qabstractitemmodel.html#setData>(), and implement flags <http://harmattan-dev.nokia.com/docs/library/html/qt4/qabstractitemmodel.html#flags>() to return a value containing Qt::ItemIsEditable <http://harmattan-dev.nokia.com/docs/library/html/qt4/qt.html#ItemFlag-enum>.
http://stackoverflow.com/questions/11736560/edit-table-in-pyqt-using-qabstracttablemodel Am 13.10.2013 12:57, schrieb Frank Rueter | OHUfx: > Thanks Sebastian, > > I don't see en editor in this though, so the result for me in PySide > (after removing the QVariant references) is a static, non-ediablte table. > > > On 13/10/13 12:43 AM, Sebastian Elsner wrote: >> Hi all, >> >> the approach I like most is described in this blog entry: >> http://www.saltycrane.com/blog/2007/06/pyqt-42-qabstracttablemodelqtableview/ >> >> I think this is what you want. >> >> Cheers >> >> Sebastian >> >> >> Am 12.10.2013 22:49, schrieb Frank Rueter | OHUfx: >>> Is this the best way to do it though? I.e. having one item per cell? >>> s there another way at all? >>> I'm still a bit lost in the model/view design and can't find the >>> answer online. >>> >>> I'm simply trying to have each row represent a "task" with a >>> title/description (string), a status (boolean) and a priority >>> (integer). For the integer I need a spin box and for the boolean I >>> need a checkbox. The examples I found online all seem to be doing >>> something slightly different and often use different ways which >>> makes matters more confusing. >>> >>> Here is what I have at the moment: >>> http://pastebin.com/H3GD0xVB >>> >>> The "status" and "priority" values don't display currnelty as I >>> haven't figured out how to properly assign a delegate to just those >>> cells. At the top I tried to define a n item delegete for a spin box >>> but I'm not sure how to properly assign it. >>> >>> Do I have to make the delegate draw different widgets (spin box / >>> checkbox) depending on data type, or can/should I use a different >>> delegate for each cell? >>> >>> I'm sure the answer is right in front of me, could you please help >>> one more time please?! >>> >>> Cheers, >>> frank >>> >>> >>> On 11/10/13 4:00 PM, Tibold Kandrai wrote: >>>> If you mean to use a QStandardItem per cell then yes. >>>> Also for storing values that you want to display, use the >>>> Qt.DisplayRole as role. >>>> >>>> Cheers, >>>> Tibold Kandrai >>>> ------------------------------------------------------------------------ >>>> >>>> From: Frank Rueter | OHUfx <mailto:[email protected]> >>>> Sent: ?11/?10/?2013 14:35 >>>> To: Tibold Kandrai <mailto:[email protected]> >>>> Cc: [email protected] <mailto:[email protected]> >>>> Subject: Re: [PySide] simple QTableView example >>>> >>>> one more silly question if I may: >>>> So if I have a task like this: >>>> newTask = {'title':'new task', 'priority':1, 'status':False} >>>> >>>> and need to store the data in one row in the model I should use >>>> three different items, one for each value, right?! >>>> >>>> e.g.: >>>> >>>> newTask = {'title':'new task', 'priority':1, 'status':False} >>>> row = self.model.rowCount() >>>> for column, attr in enumerate(['title', 'priority', >>>> 'status']): >>>> newItem = QtGui.QStandardItem(newTask[attr]) >>>> self.model.setItem(row, column, newItem) >>>> >>>> then juggle delegates or widgets to use a spin box for the integer >>>> and a checkbox for the boolean... >>>> >>>> Thanks for the help! >>>> >>>> Cheers, >>>> frank >>>> >>>> On 10/10/13 11:44 PM, Tibold Kandrai wrote: >>>>> Hey, >>>>> I'm not sure I understand the problem correctly. >>>>> If you want to store data in a cell or a QStandardItem, then you >>>>> need to use setData() and data(). >>>>> Generally you shouldn't need to subclass QStandardItem or >>>>> QStandardItemModel. >>>>> Here is an example how: >>>>> # Define roles >>>>> FINISHED_ROLE = QtCore.Qt.UserRole + 1 >>>>> PRIORITY_ROLE = QtCore.Qt.UserRole + 2 >>>>> # Create model >>>>> model = QtGui.QStandardItemModel() >>>>> item = QtGui.QStandarItem() >>>>> model.appendRow(item) >>>>> item_index = item.index() >>>>> # Store data using the item >>>>> item.setData(finished, FINISHED_ROLE) >>>>> item.setData(priority, PRIORITY_ROLE) >>>>> # Store data using the model >>>>> model.setData(item_index, finished, FINISHED_ROLE) >>>>> model.setData(item_index, priority, PRIORITY_ROLE) >>>>> # Retrieve data using the item >>>>> finished = item.data(FINISHED_ROLE) >>>>> priority = item.data(PRIORITY_ROLE) >>>>> # Retrieve data using the model >>>>> finished = model.data(item_index, FINISHED_ROLE) >>>>> priority = model.data(item_index, PRIORITY_ROLE) >>>>> In some cases like click event handlers, you have the model and >>>>> the item index, there it's easier to use the model methods instead >>>>> of finding the item and then getting the data. ? >>>>> Hope it helps. >>>>> Cheers, >>>>> Tibold >>>>> *From:* Frank Rueter | OHUfx >>>>> *Sent:* ?2013? ?October? ?10?, ?Thursday ?19?:?37 >>>>> *To:* [email protected] >>>>> After looking at some more examples I think my approach of storing >>>>> multiple values in one item is fundamentally flawed. >>>>> Instead I should be using one item per cell and assign the >>>>> respective data, right?! >>>>> >>>>> I shall re-write the example accordingly, sorry for the noise. >>>>> >>>>> frank >>>>> >>>>> On 10/10/13 6:34 PM, Frank Rueter | OHUfx wrote: >>>>> >>>>> I meant QTableView not QStandardTableView :/ >>>>> >>>>> On 10/10/13 6:33 PM, Frank Rueter | OHUfx wrote: >>>>> >>>>> Hi all, >>>>> >>>>> after a bit of a break from PySide I am trying to wrap my >>>>> head around the model/view stuff again and am trying to >>>>> understand how a very simple example would work where a >>>>> QStandarItem has properties "title", "priority" and >>>>> "finished" which are displayed via a QStandardTableView. >>>>> >>>>> I am struggling with understanding how to properly display >>>>> the above three properties in the table's columns. I tried >>>>> setting the data() method on the model like this: >>>>> >>>>> / def data(self, index, role=QtCore.Qt.DisplayRole):// >>>>> // '''Return data based on index and role'''// >>>>> // item = self.itemFromIndex(index)// >>>>> // if index.column() == 0:// >>>>> // return item.title// >>>>> // elif index.column() == 1:// >>>>> // return item.finished// >>>>> // elif index.column() == 2:// >>>>> // return item.priority/ >>>>> >>>>> but for some reason it errors saying item does not have >>>>> attribute "finished" even though my item object s declared >>>>> like this: >>>>> >>>>> /class TaskItem(QtGui.QStandardItem):// >>>>> // '''Item to hold a task for the todo list'''// >>>>> //// >>>>> // def __init__(self, title, finished=False, >>>>> priority=1):// >>>>> // super(TaskItem, self).__init__(title)// >>>>> // self.title = title// >>>>> // self.finished = finished// >>>>> // self.priority = priority/ >>>>> >>>>> >>>>> When printing the item's attributes via dir() I see that, >>>>> when the model is populated, the last item it attempts to >>>>> call is not my custom item object, but something else with >>>>> less attributes and methods. Clearly there is something I >>>>> haven't quite understood about this process. >>>>> >>>>> Also, if I use the models data() method as pointed out above, >>>>> I get checkboxes in the cells which I don't want at this >>>>> stage. >>>>> >>>>> Can somebody please help me understand where I go wrong? >>>>> Attached is the whole test code. >>>>> >>>>> Cheers, >>>>> frank >>>>> >>>>> P.S.: I am aware that the controller code shouldn't >>>>> necessarily live in the QWidget's methods, this is just for >>>>> testing which I will clean up once I get how it all connects >>>>> again >>>>> >>>>> >>>>> _______________________________________________ >>>>> PySide mailing list >>>>> [email protected] >>>>> http://lists.qt-project.org/mailman/listinfo/pyside >>>>> >>>>> >>>>> >>>>> >>>>> _______________________________________________ >>>>> PySide mailing list >>>>> [email protected] >>>>> http://lists.qt-project.org/mailman/listinfo/pyside >>>>> >>>>> >>>> >>> >>> >>> >>> >>> _______________________________________________ >>> PySide mailing list >>> [email protected] >>> http://lists.qt-project.org/mailman/listinfo/pyside >> >> >> >> _______________________________________________ >> PySide mailing list >> [email protected] >> http://lists.qt-project.org/mailman/listinfo/pyside > > > > > _______________________________________________ > PySide mailing list > [email protected] > http://lists.qt-project.org/mailman/listinfo/pyside
_______________________________________________ PySide mailing list [email protected] http://lists.qt-project.org/mailman/listinfo/pyside
