2016-08-18 3 views
0

У меня есть tableView, у которого есть столбец, который использует comboBox. Мне нужно заполнить comboBox, используя класс делегата с данными из класса модели. Я использовал сигналы и слоты для этой задачи, но я знаю, что есть метод, использующий data.Отправка данных от модели делегату

Вот как я создаю и заполняю comboBox. Мне нужно получить строку файла непосредственно из класса модели, не сохранив ее в делетете.

QWidget *CDelegate :: createEditor(QWidget *parent, const QStyleOptionViewItem &/* option */, const QModelIndex & index) const 
{ 

if(index.column() == COL_ComboBox) 
    { 
     QComboBox *editor = new QComboBox(parent); 

     for(int i=0; i<file.at(index.row()).size(); i++) 
      editor -> addItem(file.at(index.row()).at(i)) 

     return editor; 
    } 
... 
} 
+0

Что такое "файл"? И как это было заполнено? –

+0

file - вектор векторов строк. Он хранит каждый comboBox в столбце и дату, которая хранится в них. Я сделал это как временное решение, пока не выясню, как система делегата и модели может применить его. – student

+0

Мне нужно решение для отправки всех данных comboBox сразу. Неважно, как хранятся эти данные. – student

ответ

1

Как я понимаю, вы хотите, чтобы заполнить QComboBox с данными модели вашего QTableView. Как видите, параметр const QModelIndex & index в функции createEditor предоставляет вам доступ к этой модели. Ищите метод model из QModelIndex класс. Вот почему, ваша функция createEditor может быть такой:

QWidget *CDelegate :: createEditor(QWidget *parent, const QStyleOptionViewItem &/* option */, const QModelIndex & index) const 
{ 

if(index.column() == COL_ComboBox) 
    { 
     QComboBox *editor = new QComboBox(parent); 

     const QAbstractItemModel *model = index.model(); 

     while(/*condition*/) 
     { 
      // take data from model 
      // QVariant dt = model->data(...); 

      // fill editor with data from dt 
      // editor->addItem(...) 
     } 

     return editor; 
    } 
... 
} 
Смежные вопросы