在树小部件中,我连接了以下信号:
connect(mTreeWidget, SIGNAL(itemClicked(QTreeWidgetItem*, int)),
SLOT(onItemClicked(QTreeWidgetItem*, int)));
onItemClicked()
插槽如下:
void WidgetBox::onItemClicked(QTreeWidgetItem *item, int )
{
int index = getPageIndex(item);
setCurrentIndex(index);
}
int WidgetBox::getPageIndex(QTreeWidgetItem *item)
{
if (!item) return -1;
QTreeWidgetItem *parent = item->parent();
if(parent) // Parent is top level item
{
return mTreeWidget->indexOfTopLevelItem(parent);
}
else // Current item is top level
{
return item->treeWidget()->indexOfTopLevelItem(item);
}
}
void WidgetBox::setCurrentIndex(int index)
{
if (index != currentIndex() && checkIndex(index))
{
mTreeWidget->setCurrentItem(mTreeWidget->topLevelItem(index));
emit currentIndexChanged(index);
}
}
但是我无法捕获itemClicked()
信号并且onItemClicked()
从未执行过,因为顶级项目具有拦截鼠标事件的按钮小部件(使用setItemWidget()
方法设置),并且子项目包含容器小部件,其中可能包含任何小部件组合。
这里有一个好的方法来itemClicked()
为树小部件的顶级和子项调用这个信号吗?
- installEventFilter() 用于在项目中找到的所有小部件,如下所示
QList<QWidget *> widgets = parentWidget.findChildren<QWidget *>();
: - 或者以某种方式建立鼠标事件传播?
- QCoreApplication::postEvent()?
如何更好地组织这样的过程,以便所有小部件都根据需要处理鼠标事件以及 TreeWidget 问题SIGNAL(itemClicked())
?