2011-06-08 34 views
0

如何在QMap中存儲數據& Qlist和QT中的Reterive主題?如何將數據存儲在QT中的QMap和Qlist中?

我的要求是我有計劃名稱這是週一 - 週日及附表的項目,如「週日,12:00 - 17:30」 .........

現在我想有2 QlistWidget一個containsSchedule名稱和其他包含Schedule項目,現在當我在第一個列表框中選擇一個時間表名稱時,相應的相關時間表項目會在另一個列表框中列出。

如何使用Qmap和Qlist將項目添加到listwidget? 如何使用它保持數據im內存?

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); 
} 

回答

3

你需要像這樣來存儲數據。

//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]); 

} 
+0

@OrcunC:現在如何在運行時將這些數據添加到Qlistwidget? – user662285 2011-06-08 09:49:54

+0

填充地圖後,遍歷鍵並將它們添加到第一個列表中,如下所示。 foreach(QString key,map.keys()){firstwidget-> addItem(key)}然後將一個插槽連接到currentItemChanged()或currentRowChanged()信號。 currentItemChanged()似乎是一個更好的選擇。獲取項目的文本並將其作爲關鍵字來填充第二個列表,如上所示。 – 2011-06-08 10:04:04

+0

@OrcunC:你可以添加示例代碼嗎? – user662285 2011-06-08 10:07:13