感谢经历、 2022-03-24 11:33 采纳率: 67.9%
浏览 53
已结题

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也不会再次触发信号

  • 写回答

2条回答 默认 最新

  • CSDN专家-cpp_learner 2022-03-28 01:45
    关注

    通过QStandardItemModel设置的项目,任何改变都会触发void QStandardItemModel::itemChanged(QStandardItem * item)信号

    因此需要定义一个槽函数和这个信号关联

    private slots :

    void treeItem_CheckChildChanged ( QStandardItem * item );

    关联代码写在model创建之后的地方:

    //关联项目属性改变的信号和槽

    connect ( model ,&QStandardItemModel::itemChanged , this ,&Widget::treeItemChanged );

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
    感谢经历、 2022-03-28 06:09

    感谢

    回复
查看更多回答(1条)
编辑
预览

报告相同问题?

问题事件

  • 系统已结题 4月4日
  • 已采纳回答 3月28日
  • 创建了问题 3月24日
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部