Dzień dobry,
zastanawiam się jak przyspieszyć obiekt typu QComboBox. Mam do wrzucenia do takiego kombosa 50tyś. elementów. O ile wrzucanie elementów trwa krótko to ich wyświetlenie skutkuje już pojawieniem się efektu zawieszenia programu na 5, może 10 sekund.
Robię tak:
Tworzę sobie QStringListę na podstawie przejechania iteratorem listy głównej listy danych mojej aplikacji.
Ze strukturki BazaDanych::Encja wybieram tylko dwa pola (typ, album) i składam z nich QStringa, którego wrzucam sformatowanego na listę, której wskaźnik przekazuję do funkcji wypełniającej QCB..
QStringList *BazaDanych::zwrocTypAlbum(){
QList<BazaDanych::Encja *>::Iterator it;
for(it = this->lista.begin(); it != this->lista.end(); ++it)
this->daneTypAlbum->push_back("[ " + (*it)->typ + " ]-[ " + (*it)->album + " ]");
return this->daneTypAlbum;
}
Później w programie wrzucam wskaźnik do listy this->daneTypAlbum do funkcji addItem() comboboksa:
void OknoUsuwania::wypelnij(){
this->ui->cbLista->clear();
this->ui->cbLista->addItems(*this->bd->zwrocTypAlbum());
}
Dla rozjaśnienia powyższego zamieszczam klasę mojej bazy danych:
#ifndef BAZADANYCH_H
#define BAZADANYCH_H
#include <QString>
#include <QList>
#include <QStringList>
#include <fstream>
class BazaDanych
{
public:
BazaDanych();
// Wywaliłem z deklaracji klasy metody nie mające znaczenia w temacie posta.
QStringList *zwrocTypAlbum();
~BazaDanych();
private:
struct Encja{
QString typ;
QString album;
QString podgladK;
QString podgladS;
QString uwagi;
} *en;
QList<Encja *> lista;
unsigned ilosc;
QStringList *daneTypAlbum;
};
#endif // BAZADANYCH_H
Da się jakoś przyspieszyć wyświetlanie elementów? A może QComboBox nie jest po prostu fizycznie w stanie wyświetlić taką ilość elementów... :/
Pozdrawiam
Grzegorz
delete this->tw;
jest zbędne. W dokumentacjisetView
stoi, że QComboBox przejmuje własność nad widokiem.