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);
내가 대리인으로 데이터를 추가 할 수 있습니다. 이 인터페이스에서 슬롯을 트리거해야합니까? 그렇다면 누군가 어떻게 이것을 할 수 있는지에 대한 코드 샘플을 제공해 주실 수 있습니까?
델리게이트는 절대로 모델 신호를 방출해서는 안됩니다. ** 모델의 ** 일은 이렇게하는 것입니다. 이미이 신호를 방출합니다. 코드 (슬롯 또는 펑터)를 모델에 연결해야합니다 :'connect (model, & QAbstractItemModel :: dataChanged, this, [=] (const QModelIndex & index) {/ * your code here * /}); –
예를 원한다면 예를 들어 검색하십시오. 'QAbstractItemModel' 또는'QStandardItemModel' 또는'QListView' 또는'QTableView'에 대한 내 사용자에 대해. –