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 я вообще молчу. Что делать? Или есть более изящный вариант решения данной задачи???
Спасибо за внимание!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 14.6.2011, 11:01
Сообщение #2


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

Группа: Участник
Сообщений: 2886
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

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




Репутация:   34  


пробежаться итераторами по всем трём контейнерам и сложить из каждого в контейнер назначения - так, как нужно. Только не забыть зарезервировать нужное количество памяти в контейнере назначения
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
igor_bogomolov
  опции профиля:
сообщение 14.6.2011, 12:20
Сообщение #3


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

Группа: Сомодератор
Сообщений: 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;                                                                                                                                
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
fortero
  опции профиля:
сообщение 14.6.2011, 19:29
Сообщение #4


Участник
**

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

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




Репутация:   0  


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


А не покажите пример?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 22.10.2019, 6:11