如何将信号附加到动态创建的对象的插槽

How to attach a signal to a slot for an object created dynamically

本文关键字:创建 动态 对象 插槽 信号      更新时间:2023-10-16

我目前有多个复选框,它们是动态创建的,我如何向它们分配信号。这些复选框附加到QStandardItemModel。我需要知道它们何时被点击。这就是我创建checkboxex 的方式

QStandardItem* chk_all = new QStandardItem();
chk_all->setCheckable(true);
chk_all->setCheckState(Qt::Unchecked);

要将信号附加到插槽,您需要作为对象的发件人的地址。由于这个对象在设计时并不存在于ui中,我该如何获取它的地址。这样我就可以完成连接语句

QObject::connect("what goes here" ,SIGNAL(clicked()), this, SLOT(CheckClicked())); //Tester

这些复选框不是小部件或单独的对象,QStandardItem类也不是从QObject派生的,您不能将它们分别连接到一个插槽。

由于它们的状态存储在模型中,检查或取消检查它们将使模型发出信号dataChanged(QModelIndex,QModelIndex)itemChanged(QStandardItem*)

但是,这些信号也会针对复选框状态以外的更改而发出。您可能还需要在模型中存储复选框以前的状态(使用QStandardItem::setData/data和自定义数据角色),以便将其与新状态进行比较并检测更改。