Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt GUI _ В QList вложить разного типа контейнера

Автор: fortero 14.6.2011, 1:33

Доброе время суток!
У меня есть необходимость контейнеры такого типа к примеру:

QList<QString> list1;
list1 <<"String1" <<"String2";
QList<int> list2;
list2 << 10 << 20;
QList<QLabel*> list3;
list3 << new QLabel("LB1") << new QLabel("LB2");

Все три контейнера сложить в один контейнер как это сделать?
Я думал так:
QList<QVariant> varList;
varList << QVariant(list1) << QVariant(list2) << QVariant(list3);

Но так не выходит уже когда QList<int> помещаю отказывается компилится, за QLabel я вообще молчу. Что делать? Или есть более изящный вариант решения данной задачи???
Спасибо за внимание!

Автор: Алексей1153 14.6.2011, 11:01

пробежаться итераторами по всем трём контейнерам и сложить из каждого в контейнер назначения - так, как нужно. Только не забыть зарезервировать нужное количество памяти в контейнере назначения

Автор: igor_bogomolov 14.6.2011, 12:20

Цитата(fortero @ 14.6.2011, 2:33) *
QList<QVariant> varList;
varList << QVariant(list1) << QVariant(list2) << QVariant(list3);

Но так не выходит уже когда QList<int> помещаю отказывается компилится, за QLabel я вообще молчу. Что делать?
Это потому что у QVariant нет конструктора QVariant::QVariant ( const QList<int> & val ) и т.д. Да и тип QList<int> не зарегистрирован для него.
Можно так сделать:
Раскрывающийся текст
#include <QtCore>                                                                                                                            
#include <QtGui>                                                                                                                            
                                                                                                                                            
Q_DECLARE_METATYPE(QList<int>)                                                                                                              
Q_DECLARE_METATYPE(QList<QLabel*>)                                                                                                          
                                                                                                                                            
int main(int argc, char *argv[])                                                                                                            
{                                                                                                                                            
    QApplication a(argc, argv);                                                                                                              
                                                                                                                                            
    QList<QString> list1;                                                                                                                    
    list1 <<"String1" <<"String2";                                                                                                          
                                                                                                                                            
    QList<int> list2;                                                                                                                        
    list2 << 10 << 20;                                                                                                                      
                                                                                                                                            
    QList<QLabel*> list3;                                                                                                                    
    list3 << new QLabel("LB1") << new QLabel("LB2");                                                                                        
                                                                                                                                            
    QVariant v2;                                                                                                                            
    v2.setValue(list2);                                                                                                                      
                                                                                                                                            
    QVariant v3;                                                                                                                            
    v3.setValue(list3);                                                                                                                      
                                                                                                                                            
    QVariantList varList;                                                                                                                    
    varList << QVariant(list1) << v2 << v3;                                                                                                  
                                                                                                                                            
    return 0;                                                                                                                                
}

Автор: fortero 14.6.2011, 19:29

Цитата(Алексей1153 @ 14.6.2011, 11:01) *
пробежаться итераторами по всем трём контейнерам и сложить из каждого в контейнер назначения - так, как нужно. Только не забыть зарезервировать нужное количество памяти в контейнере назначения


А не покажите пример?

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)