如何从代表处发送信号

How to send a signal from delegate

本文关键字:信号 代表处      更新时间:2023-10-16

我有一个使用TableView的用户界面。它有3列。最后一列有一个comboBox。所有数据都与委托一起插入。问题是,当combobox索引更改时,我找不到向用户界面类的公共插槽发送信号的方法。对于代理,我已经知道当前索引。有人知道把这个索引发送到ui的方法吗?我不认为唯一可能的解决方案是使用信号和插槽。是否有提取这些数据的直接解决方案?

编辑

我所理解的是,我必须做这样的事情:

void Delegate :: setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const
{
 if(index.column() == COL_Coordonate) // test if we are at the last column
   {
        QComboBox *comboBox = static_cast<QComboBox*>(editor);
        model -> setData(index, comboBox -> currentIndex(), Qt::EditRole);
        emit dataChanged(comboBox -> currentIndex(),comboBox -> currentIndex()); // something like this you have in mind?
   }
}

我如何在用户界面中接收该索引?我在那里创建了我的模型,类似于:

QStandardItemModel *model;
Delegate *mydelegate;

并像一样使用它们

mydelegate = new Delegate(this);
model = new QStandardItemModel(0, 3, this); // I add rows dynamically
ui -> tableView -> setModel(model);
ui -> tableView -> setItemDelegate (mydelegate);

当我按下按钮时,我会向代理添加数据。我需要从这个接口触发一个插槽吗?如果是这样的话,请有人提供一个关于我如何做到这一点的代码示例?

您有一个QComboBox实例。你可以连接到它的信号。你不知道什么?在任何情况下,都不应该连接到委托:它是视图的实现细节。您应该与模型接口,而不是与视图接口。连接型号dataChanged信号!