Russian Qt Forum
Ноябрь 01, 2024, 04:10 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QCombobox и QAbstractListModel не добавляются элементы  (Прочитано 3264 раз)
crazymonkey
Гость
« : Май 08, 2015, 18:24 »

Добрый день.
Сразу к коду:
 
Код:
struct MetaGeneratorCommunication{
    GeneratorCommunication* communication;
    QString name;
};

class GeneratorsList: public QAbstractListModel{
    Q_OBJECT
public:
    GeneratorsList(QObject* parent = 0){}

    int rowCount(const QModelIndex &parent) const{
        return _data.size();
    }

    QVariant data(const QModelIndex &index, int role) const{

        if( role == Qt::UserRole){
            QVariant var;
            var.setValue(_data[index.row()].communication);
            return var;
            return _data[index.row()].communication;
        }
        if (role == Qt::DisplayRole){
            return _data[index.row()].name;
        }

    }

    void addCommunication(GeneratorCommunication* data,QString name){
        MetaGeneratorCommunication tmp;
        tmp.communication = data;
        tmp.name = name;
        _data.append(tmp);
    }
private:
    QList<MetaGeneratorCommunication> _data;
};

Заполняется эта модель вот так вот:
Код:

    gen = new Frequency::GeneratorsList();
    gen->addCommunication(net_generator,"foo");
    gen->addCommunication(serial_generator,"bar");

    ui->comboBox->setModel(gen);

И в итоге на форме я вижу только один элемент в комбобоксе (причём первый добавленный)
Вроде всё по документации. Не могу понять где же я ошибся.
Записан
torwig
Самовар
**
Offline Offline

Сообщений: 134



Просмотр профиля
« Ответ #1 : Май 08, 2015, 19:06 »

Может быть здесь есть ответ на Ваш вопрос:
http://stackoverflow.com/questions/4702972/programmatically-adding-a-new-row-to-a-qabstractlistmodel-subclass .
Я думаю вот так просто как у Вас, append() и все, этого мало. Надо сообщать что модель изменилась.
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #2 : Май 08, 2015, 19:41 »

Надо смотреть в доки: при добавлении элементов нужно вызывать методы beginInsertRows и endInsertRows:
Код
Java
class LogModel extends QAbstractTableModel {
...
   public void add(TermState state) {
       beginInsertRows(null, States.size(), States.size());
       states.add(state);
       endInsertRows();
   }
...    
   List <TermState> states = new ArrayList <TermState> ();
}
 

Для сишного варианта нужно не null передавать, а пустой QModelIndex:
beginInsertRows(QModelIndex(), ...
« Последнее редактирование: Май 08, 2015, 19:43 от gil9red » Записан

Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.096 секунд. Запросов: 22.