[PySide] editing selected cells in QTabelWidget
David Ching
dc at dcsoft.com
Thu Aug 25 18:51:14 CEST 2022
> Date: Thu, 25 Aug 2022 20:36:01 +1200
> From: Frank Rueter <frank at ohufx.com>
> Subject: [PySide] editing selected cells in QTabelWidget
> Hi all,
>
> I have a simple table which will never hold much data, so I opted for
QTabelWidget rather than QTabelView.
> Two columns have combo boxes set as cell widgets; all other cells house
straight up strings.
>
> I have set the selection behaviour to QAbstractItemView.SelectRows and am
now trying to figure out how to enable
> editing of selected cells, so that the user can select multiple rows,
then double click a cell in that selection and edit it,
> which will cause all other cells in the same column within the selection
to receive the new value.
>
> I have hit a couple of issues:
>
> 1. By default the selection is reset when I double click in a cell, so I
assume I will have to override QTableWidget.mousePressEvent() to prevent
that somehow. Any suggestions on how to best manage that best? I am not
sure what I need to re-implement to just prevent the selection being
reset.
In general, double clicking on a multiple selection doesn't work since as
you note, the first click (of the double click) selects the single item that
was clicked and de-selects the other items. To edit multiple selected items
(my app runs on Windows) I select them and then start editing by pressing F2
(which Excel uses similarly) or a toolbar button, or right-clicking one of
the selected items which opens a context menu with an Edit item.
> 2. the cell widgets do not modify the actual cell item's value. Do I
> need to manually connect the widgets to a slot that will do that or is
> there a better way to do that?
I had a similar task:
MyTableWidget::MyTableWidget(QWidget *parent) : QTableWidget(parent)
{
m_delegate = new MyTableItemDelegate(); // MyTableItemDelegate is
derived from QStyledItemDelegate
setItemDelegate(m_delegate);
}
MyTableItemDelegate overrides createEditor(), setEditorData(),
setModelData(), updateEditorGeometry().
Apologies, this code is in C++. It has been years since I developed this
code, so don't know more details off the top of my head.
Hope this helps,
David
More information about the PySide
mailing list