Как обновить несколько выбранных виджетов строк в QTreeWidget? - PullRequest
0 голосов
/ 10 апреля 2019

Я хочу обновить все флажки в первом столбце среди выбранных строк из QTreeWidget.

Например, рассмотрим выбор пункта 2 И элемента 3 в QTreeView, используя Режим выбора до QAbstractItemView :: ExtendedSelection .

| Name   | Visible        |
|--------|----------------|
| Item 1 | [x] Checkbox 1 |
| Item 2 | [ ] Checkbox 2 |
| Item 3 | [ ] Checkbox 3 |

Затем, когда я нажимаю флажок 2, я ожидаю включить оба флажка 2 и флажок 3, и выбор не должен измениться.

Но вместо этого у меня установлен флажок 2, и выбор обновлен только до currentItem (пункт 2).Флажок 3 не изменен.

Я работаю в Windows 7 и Visual Studio 2015 с Qt 5.12.

tree.h

/** Update selected items list */
void updateSelectedItemsList() { m_selectedItemsList = selectedItems(); };

/** Update selected items
 * Updates multiple selected items when contents of the \p column in the specified \p item changes
 * \param item current modified item
 * \param column where something changed
 */
void updateSelectedItems( bool state );

tree.cpp

connect( this, SIGNAL( itemSelectionChanged() ), this, SLOT( updateSelectedItemsList() ) );
connect( m_visibleCheckBox, SIGNAL( toggled( bool ) ),this->getParent(), SLOT( updateSelectedItems(bool) ) );

...

void ConfigureSignalsTree::updateSelectedItems( bool state )
{
   for ( auto item : m_selectedItemsList )
   {
        ConfigureSignalsTreeItem* treeItem = dynamic_cast<ConfigureSignalsTreeItem*>(item);
        if ( treeItem )
        {
            treeItem->m_visibleCheckBox->setChecked( state );
        }
    }
}

Проблема: m_selectedItemsList всегда содержит currentItem после того, как я нажал на флажок.

Что я понял из проведенных тестов

Когда я нажимаю на флажок, сигналы отправляются на:

  1. Обновить выбранные элементы в TreeView, которые изменяют предыдущие selectedItems на currentItem
  2. Обновить статус флажка

Я хочу избежать обновления выбора, но я не знаю, как его поймать.

Возможно, мне следует использовать QItemSelection Class , но у меня нет структуры программирования Модель / Представление, поэтому я не знаюесли мне придется изменить всю мою архитектуру, чтобы использовать его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...