Как хранить данные в QMap и Qlist в QT?

Как хранить данные в QMap и Qlist и извлекать их в QT?

Мое требование: у меня есть имя расписания с понедельника по воскресенье и элементы расписания, такие как «Воскресенье, 12:00 - 17:30»..........

Теперь я хочу иметь 2 QlistWidget, один из которых содержит имена расписаний, а другой содержит элементы расписания, теперь, когда я выбираю одно имя расписания в первом списке, соответствующий связанный элемент расписания отображается в другом списке.

Как добавить элементы в listwidget с помощью Qmap и Qlist?

Как с его помощью сохранить данные в памяти?

  QList<QString> ScheduleItemslist;
     ScheduleItemslist << "Saturday,09:00- 17:30" << "Sunday,10:00- 12:00" << "Sunday,01:30- 17:30" ;

 QList<QString> ScheduleItemslst;
  ScheduleItemslst << "Monday,09:00- 17:30" << "Tuesday,10:00- 12:00" << "Wednesday,01:30- 17:30" ;


QMap<QString,QList<QString> > map;
map["Weekend Plus"] = ScheduleItemslist ;
map["All"] = ScheduleItemslst ;

foreach (QString key, map.keys())
{
    ui->listWidgetTimeSet->addItem (key) ;
}


ui->listWidgetTime->addItems(ScheduleItemslist);

В событии ItemselectionChanged:

QList<QString> ScheduleItemslist;
     ScheduleItemslist << "Saturday,09:00- 17:30" << "Sunday,10:00- 12:00" << "Sunday,01:30- 17:30" ;

  QList<QString> ScheduleItemslst;
    ScheduleItemslst << "Monday,09:00- 17:30" << "Tuesday,10:00- 12:00" << "Wednesday,01:30- 17:30" ;

if(ui->listWidgetTimeSet->currentItem()->text() == "Weekend Plus")
{
    ui->listWidgetTime->addItems(ScheduleItemslist);
}
else if (ui->listWidgetTimeSet->currentItem()->text() == "All")
{
    ui->listWidgetTime->addItems(ScheduleItemslst);
}

person user662285    schedule 08.06.2011    source источник


Ответы (1)


Вам нужно что-то подобное для хранения ваших данных.

//Declare your map
QMap <QString, QList <QString> > map;

//Populate your map in a function
void populateMap ()
{

    QList<QString> sundaylist;
    sundaylist<< "Sunday , 12:00 - 17:30" << "Sunday , 18:00 - 20:30";
    map ["Sunday"] = sundaylist;

    QList<QString> mondaylist;
    mondaylist<< "Monday , 12:00 - 17:30" << "Monday , 18:00 - 20:30";
    map ["Monday"] = mondaylist        
}

//Populate list1 with keys in your map
void populateList1 ()
{
    list1.addItems (map.keys ());
}

//This is your slot connected to currentItemChanged  signal of list1
void list1CurrentItemChanged ( QListWidgetItem * current, QListWidgetItem * previous ) 
{
    list2.clear ();
    QString key = current->text ();
    list2.addItems (map [key]);

}
person O.C.    schedule 08.06.2011
comment
@OrcunC: Теперь, как добавить эти данные в Qlistwidget во время выполнения? - person user662285; 08.06.2011
comment
После того, как вы заполнили свою карту, переберите ключи и добавьте их в первый список, как показано ниже. foreach (QString key, map.keys ()) {firstwidget->addItem (key)} Затем подключите слот к сигналу currentItemChanged() или currentRowChanged(). currentItemChanged() кажется лучшим вариантом. Получите текст элемента и используйте его в качестве ключа для заполнения второго списка, как показано выше. - person O.C.; 08.06.2011
comment
@OrcunC: пожалуйста, посмотрите мой опубликованный код выше. это нормально или требуются какие-то изменения? - person user662285; 08.06.2011
comment
У меня сейчас нет с собой компилятора, но я добавил псевдокод, чтобы вы хотя бы видели, что вам нужно делать. надеюсь, это поможет - person O.C.; 08.06.2011
comment
@OrcunC: Еще одна помощь, как инициализировать список QList‹QString› по умолчанию? - person user662285; 08.06.2011
comment
Я не понимаю, что вы имеете в виду. Строка типа QList‹QString› mylist создаст переменную mylist как пустой список. Это то, что ты имеешь в виду ? Если вам нужно инициализировать статический QList, прочитайте stackoverflow.com/questions/4320677 / - person O.C.; 08.06.2011
comment
Нет в моем файле заголовка для моего конструктора, когда я передаю список QList‹QString›, он говорит, что аргумент по умолчанию отсутствует для списка Qlist‹Qstring› - person user662285; 08.06.2011
comment
@OrcunC: Я понял, чувак. Спасибо. - person user662285; 08.06.2011
comment
благодаря вашему примеру я нашел свою ошибку, поэтому QMap <QString, QList<QString>> отличается от QMap <QString, QList<QString> >, если не добавить пробел, возникает следующая ошибка: '>>' should be '> >' within a nested template argument list, Спасибо +1 за ваш ответ! - person Guilherme Nascimento; 04.03.2014