2016-08-01 5 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? 
    } 

} 

そして、どのように私は、ユーザーインターフェイスにそのインデックスを受け取ることができます:私はそれは私がこのような何かをしなければならないであることを理解何

EDIT

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の新機能で、モデルビューではほとんど0の経験があります。あなたは例を挙げていますか?私は編集のcodのサンプルを編集します。 – student

関連する問題