2016-08-01 2 views
0

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

델리게이트는 절대로 모델 신호를 방출해서는 안됩니다. ** 모델의 ** 일은 이렇게하는 것입니다. 이미이 신호를 방출합니다. 코드 (슬롯 또는 펑터)를 모델에 연결해야합니다 :'connect (model, & QAbstractItemModel :: dataChanged, this, [=] (const QModelIndex & index) {/ * your code here * /}); –

+0

예를 원한다면 예를 들어 검색하십시오. 'QAbstractItemModel' 또는'QStandardItemModel' 또는'QListView' 또는'QTableView'에 대한 내 사용자에 대해. –

답변

1

QComboBox 인스턴스가 있습니다. 신호에 연결할 수 있습니다. 너는 무엇을 모르는가? 어쨌든, 당신은 delegate에 연결해서는 안되며, 뷰의 구현 세부 사항이다. 뷰가 아닌 모델과 인터페이스해야합니다. 모델dataChanged 신호에 연결하십시오!

+0

Qt를 처음 접했고 모델보기에서 거의 0 번 경험했습니다. Ca는 예제를 제공합니까? 나는 편집에서 대구의 표본을 편집 할 것이다. – student

관련 문제