感谢经历、 2022-03-24 19: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 09:45
    关注

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

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

    private slots :

    void treeItem_CheckChildChanged ( QStandardItem * item );

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

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

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

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 4月5日
  • 已采纳回答 3月28日
  • 创建了问题 3月24日

悬赏问题

  • ¥15 乌班图ip地址配置及远程SSH
  • ¥15 怎么让点阵屏显示静态爱心,用keiluVision5写出让点阵屏显示静态爱心的代码,越快越好
  • ¥15 PSPICE制作一个加法器
  • ¥15 javaweb项目无法正常跳转
  • ¥15 VMBox虚拟机无法访问
  • ¥15 skd显示找不到头文件
  • ¥15 机器视觉中图片中长度与真实长度的关系
  • ¥15 fastreport table 怎么只让每页的最下面和最顶部有横线
  • ¥15 java 的protected权限 ,问题在注释里
  • ¥15 这个是哪里有问题啊?