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

时间:2013-07-19 20:15:09

标签: c++ qt signals-slots

我目前有多个动态创建的复选框,如何向其发送信号。这些复选框附加到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

1 个答案:

答案 0 :(得分:2)

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

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

但是,除了复选框状态之外,还会发出这些信号以进行更改。您可能还必须在模型中存储复选框以前的状态(使用QStandardItem::setData / datacustom data role),以便能够将其与新状态进行比较并检测更改。