Hi Frank,

You should be able to suppress the single click deselect using an event filter.
You create (or use an existing) QObject that will receive all events that are 
sent to the QObject that you install the event filter on, and from that, you 
define an `eventFilter(obj: QObject, event: QEvent) -> bool` method on that 
which will do the event filtering.

From that method, you can look at the events type, looking for 
`QEvent.MouseButtonPress` or `QEvent.MouseButtonRelease` (not sure which is 
actually triggering the unselect), and just return `True` from the event filter 
in those cases. All other cases, you just return the parent’s implementation of 
eventFilter, passing the same object and event.

This way you achieve suppression of the mousePress and mouseRelease.

(I tried my best to translate these to Python, but these might not be 100% 
correct).

~Keith

From: PySide <pyside-boun...@qt-project.org> On Behalf Of Frank Rueter
Sent: Friday, August 26, 2022 3:05 AM
To: David Ching <d...@dcsoft.com>
Cc: pyside@qt-project.org
Subject: Re: [PySide] editing selected cells in QTabelWidget

So I made some progress but am now having the problem that a right click on a 
persistent editor (combo box) will lose the current table selection. I tried 
reimplementing the mousePressEvent on both the editor widget and the actual 
table widget to stop that behaviour but to no avail.
Here is a simplified version of the code that shows the problem:
https://pastebin.com/M9RSTFSJ
[cid:image001.png@01D8B937.5E6EA900]
What I am trying to achieve is that a right click on the editor ithe "Type" 
column will keep the current row selection, so that I can then pop up the 
editor and apply the new value to all selected rows.

What am I missing?

Cheers,
frank

On Fri, Aug 26, 2022 at 7:58 AM Frank Rueter 
<fr...@ohufx.com<mailto:fr...@ohufx.com>> wrote:
Thanks David,
I was thinking about a right click option as a Plan B. Will do that.
I will look into using a delegate as well. I had forgotten I could use those 
with the TableWidget as well.

Thanks!
Frank


On Fri, Aug 26, 2022 at 4:52 AM David Ching 
<d...@dcsoft.com<mailto:d...@dcsoft.com>> wrote:
> Date: Thu, 25 Aug 2022 20:36:01 +1200
> From: Frank Rueter <fr...@ohufx.com<mailto:fr...@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



_______________________________________________
PySide mailing list
PySide@qt-project.org<mailto:PySide@qt-project.org>
https://lists.qt-project.org/listinfo/pyside
_______________________________________________
PySide mailing list
PySide@qt-project.org
https://lists.qt-project.org/listinfo/pyside

Reply via email to