Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在QTreeView中立即检测复选框状态更改?_Qt_Qt5_Qtreeview - Fatal编程技术网

如何在QTreeView中立即检测复选框状态更改?

如何在QTreeView中立即检测复选框状态更改?,qt,qt5,qtreeview,Qt,Qt5,Qtreeview,我在linux上使用Qt5.9。我有一个QTreeView,其中我设置了一个从qabstractemodel派生的自定义模型,并为树项填充了几个普通类。每个treeview项目旁边都有一个复选框 我在QTreeView上设置了以下属性 treeView->viewport()->setAttribute(Qt::WA_Hover); 因此,当鼠标悬停在树项目上时,我可以通过代理绘制方法捕获事件 问题是,我在每个树项目中都有一个复选框,我希望能够在复选框的状态更改时捕获,但我的代理似

我在linux上使用Qt5.9。我有一个QTreeView,其中我设置了一个从qabstractemodel派生的自定义模型,并为树项填充了几个普通类。每个treeview项目旁边都有一个复选框

我在QTreeView上设置了以下属性

treeView->viewport()->setAttribute(Qt::WA_Hover);
因此,当鼠标悬停在树项目上时,我可以通过代理绘制方法捕获事件

问题是,我在每个树项目中都有一个复选框,我希望能够在复选框的状态更改时捕获,但我的代理似乎没有捕获该复选框。当我将鼠标悬停在项目上时,我可以知道复选框处于什么状态,但我想要的是能够立即知道复选框的状态何时更改,而不必再进一步移动鼠标


关于如何在树项目中立即检测复选框的状态更改,您有什么想法吗?

一个可能的解决方案是使用editorEvent方法跟踪复选框的状态更改:

#包括
类CheckboxDelegate:公共QStyledItemDelegate{
Q_对象
公众:
使用QStyledItemDelegate::QStyledItemDelegate;
bool editorEvent(QEvent*事件,
QAbstrateModel*模型,
常量QSTYLEOPTION视图项和选项,
常量QModelIndex和索引)覆盖
{
Qt::CheckState last=static_cast(模型->数据(索引,Qt::CheckStateRole.toInt());
bool res=QStyledItemDelegate::editorEvent(事件、模型、选项、索引);
Qt::CheckState current=static_cast(模型->数据(索引,Qt::CheckStateRole.toInt());
如果(上次!=当前)
Q_发射状态改变(索引);
返回res;
}
Q_信号:
无效状态已更改(常量QModelIndex和索引);
};
#包括“main.moc”
int main(int argc,char*argv[])
{
质量保证申请a(argc、argv);
QS标准模型;
model.setColumnCount(2);
for(int i=0;isetCheckable(true);
l setAttribute(Qt::WA_Hover);
CheckboxDelegate*委托=新的CheckboxDelegate(&w);
w、 setItemDelegate(委派);
QObject::connect(委托和CheckboxDelegate::stateChanged,[](常量QModelIndex和索引){
QString text=index.data().toString();
Qt::CheckState state=static_cast(index.data(Qt::CheckStateRole.toInt());

qDebug()为什么不想使用该信号?