treeview显示QStandardModel的相关问题

问题遇到的现象和发生背景

用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 );

这样你就可以在槽函数中做你所需要的操作的了

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632