crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> В QList вложить разного типа контейнера, В QList вложить разного типа контейнера
fortero
  опции профиля:
сообщение 14.6.2011, 1:33
Сообщение #1


Участник
**

Группа: Участник
Сообщений: 132
Регистрация: 4.12.2010
Пользователь №: 2242

Спасибо сказали: 0 раз(а)




Репутация:   0  


Доброе время суток!
У меня есть необходимость контейнеры такого типа к примеру:
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 я вообще молчу. Что делать? Или есть более изящный вариант решения данной задачи???
Спасибо за внимание!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
igor_bogomolov
  опции профиля:
сообщение 14.6.2011, 12:20
Сообщение #2


Профессионал
*****

Группа: Сомодератор
Сообщений: 1215
Регистрация: 22.3.2009
Из: Саратов
Пользователь №: 630

Спасибо сказали: 235 раз(а)




Репутация:   29  


Цитата(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;                                                                                                                                
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 18.4.2024, 10:26