如何从代表发送信号

时间:2016-08-01 12:29:42

标签: c++ qt

我有一个使用TableView的用户界面。它有3列。最后一列有一个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);

按下按钮时,我会与代理人一起添加数据。我是否需要从此界面触发插槽?如果是这样,有人可以提供一些代码示例,我该怎么做?

1 个答案:

答案 0 :(得分:1)

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