2016-08-01 57 views
0

我有一個使用TableView的用戶界面。它有3列。最後一列有一個組合框。所有數據都與委託一起插入。問題是我無法找到一種方法來發送信號到用戶界面類的公共插槽時,組合框索引更改。 與代表我已經知道當前的指數。是否有人知道將這個索引發送給用戶界面的方法?我不認爲唯一可行的解​​決方案是使用信號和插槽。是提取這些數據的直接解決方案嗎?如何從代表發送信號

編輯

我知道它是什麼,我必須做這樣的事情:

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){/ *你的代碼在這裏* /});'' –

+0

如果你想要例子,例如搜索在我的用戶上使用'QAbstractItemModel'或'QStandardItemModel'或'QListView'或'QTableView'。 –

回答

1

您有一個QComboBox實例。你可以連接到它的信號。你不知道什麼?在任何情況下,您都不應該連接到委託:它是視圖的實現細節。你應該與模型接口,而不是視圖。連接到型號dataChanged信號!

+0

我是Qt新手,在模型視圖上我幾乎沒有任何經驗。你提供一個例子嗎?我將在編輯中編輯一個鱈魚樣本。 – student