用treeview显示qstandardmodel,期望是:点击item的check勾选后触发一个信号,而非点击item触发信号,check勾选后点击item也不会再次触发信号。以下代码是用clicked信号连接槽函数,该方法会导致:当某个item被勾选后,再点击item仍然触发信号,并进入槽函数。
connect(ui->treeView,SIGNAL(clicked(const QModelIndex &)),this,SLOT(slot_getColumnIndexFItem(const QModelIndex &)));
void MainWindow::slot_getColumnIndexFItem(const QModelIndex &index)
{
QStandardItem *item = model->itemFromIndex(index);
if(item->checkState() == Qt::Checked)
{
qDebug()<<item->data(Qt::DisplayRole);
}else
{
return;
}
}
期望信号是由勾选check触发,而非点击item触发,check勾选后点击item也不会再次触发信号
通过QStandardItemModel设置的项目,任何改变都会触发void QStandardItemModel::itemChanged(QStandardItem * item)信号
因此需要定义一个槽函数和这个信号关联
private slots :
void treeItem_CheckChildChanged ( QStandardItem * item );
关联代码写在model创建之后的地方:
//关联项目属性改变的信号和槽
connect ( model ,&QStandardItemModel::itemChanged , this ,&Widget::treeItemChanged );
这样你就可以在槽函数中做你所需要的操作的了
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!