Я хочу обновить все флажки в первом столбце среди выбранных строк из 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 после того, как я нажал на флажок.
Что я понял из проведенных тестов
Когда я нажимаю на флажок, сигналы отправляются на:
- Обновить выбранные элементы в TreeView, которые изменяют предыдущие
selectedItems
на currentItem
- Обновить статус флажка
Я хочу избежать обновления выбора, но я не знаю, как его поймать.
Возможно, мне следует использовать QItemSelection Class , но у меня нет структуры программирования Модель / Представление, поэтому я не знаюесли мне придется изменить всю мою архитектуру, чтобы использовать его.