我有一个使用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);
按下按钮时,我会与代理人一起添加数据。我是否需要从此界面触发插槽?如果是这样,有人可以提供一些代码示例,我该怎么做?
答案 0 :(得分:1)
您有QComboBox
个实例。您可以连接到它的信号。什么你不知道?在任何情况下,您都不应该连接到委托:它是视图的实现细节。您应该与模型接口,而不是与视图接口。连接到模型的dataChanged
信号!