我想更新QTreeWidget中选定行中第一列中的所有复选框。
例如,假设我使用Selection Mode至QAbstractItemView::ExtendedSelection在QTreeView中选择了项目2和项目3。
| Name | Visible |
|--------|----------------|
| Item 1 | [x] Checkbox 1 |
| Item 2 | [ ] Checkbox 2 |
| Item 3 | [ ] Checkbox 3 |
然后,当我单击复选框2时,我希望同时启用复选框2和复选框3,并且选择不应更改。
但是我所需要的是选中复选框2,并且选择内容仅更新为currentItem
(项目2)。复选框3保持不变。
我使用Qt 5.12在Windows 7和Visual Studio 2015上工作。
/** 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 );
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。
当我单击一个复选框时,信号将发送到:
selectedItems
更改为currentItem
我想避免选择更新,但我不知道该如何捕捉。
也许我应该使用QItemSelection Class,但是我没有模型/视图编程结构,所以我不知道是否需要更改所有体系结构才能使用它。