PDA

View Full Version : QSettings beginReadarray not returning the exact size.



chinmayapadhi
10th August 2010, 07:53
Hi ,

I am trying to solve a bug. I am storing some values passed as an input by the user in QSettings array : I have the following code:

void ServerManager::readSettings()
{
QStringList info;
QList<QTreeWidgetItem*> favoriteList;
settings->beginGroup("ServerManager");
int size = settings->beginReadArray("ServerItems");

// size value is zero whereas if I put a numeric value 5 below and see the qDebug values it has the strings in it.

for (int i = 0; i < 5; ++i)
{
settings->setArrayIndex(i);
info << settings->value("Servername").toString();
info << settings->value("Server").toString();
info << settings->value("Port").toString();
info << settings->value("Game").toString();
qDebug() << info ;
QTreeWidgetItem *favoriteItem = new QTreeWidgetItem(ui->treeWidget, info);
favoriteList.append(favoriteItem);
favorites->addChildren(favoriteList);
}
settings->endArray();
settings->endGroup();
}

The data is arranged like this :

("qwer", "qwer", "1234", "Battlefield 2")
("qwer", "qwer", "1234", "Battlefield 2", "abdc", "abdc", "1234", "Battlefield 2")

("qwer", "qwer", "1234", "Battlefield 2", "abdc", "abdc", "1234", "Battlefield 2",
"bnmp", "nbmp", "1231", "Battlefield 2")

("qwer", "qwer", "1234", "Battlefield 2", "abdc", "abdc", "1234", "Battlefield 2",
"bnmp", "nbmp", "1231", "Battlefield 2", "server12", "server21", "1231", "Battlefield 2")

("qwer", "qwer", "1234", "Battlefield 2", "abdc", "abdc", "1234", "Battlefield 2",
"bnmp", "nbmp", "1231", "Battlefield 2", "server12", "server21", "1231", "Battlefield 2", "qwef", "qsdf", "1231", "Battlefield 2")


I am writing the data in the Qsetting as follows:
void ServerManager::writeSettings()
{
Servermanger *sme = new ServerMangerEdit() ;

if (sme->exec() == QDialog::Accepted) {
QStringList info;
info << sme->getServername();
info << sme->getServer();
info << sme->getPort();
info << sme->getGame();
qDebug() << info ;

settings->beginGroup("ServerManager");
settings->beginWriteArray("ServerItems");
settings->setArrayIndex(i);
settings->setValue("Servername", sme->getServername());
settings->setValue("Server", sme->getServer());
settings->setValue("Port", sme->getPort() );
settings->setValue("Game", sme->getGame());
settings->endArray();
settings->endGroup();

QTreeWidgetItem *serverItem = new QTreeWidgetItem(ui->treeWidget, info);
favorites->addChild(serverItem);
favorites->setHidden(false);
}

Can Anyone tell me why the size is Zero even after adding the data . How to find the size of the QSettings array .

Thanks

dbzhang800
10th August 2010, 08:29
settings->value("ServerManager/ServerItems/size").toInt()
will tell you the real size which written and read by QSettings array.

chinmayapadhi
10th August 2010, 09:54
the above line is not returning the size. :(
Also why the data is getting stored like the above , I want to store it like this :

("qwer", "qwer", "1234", "Battlefield 2")
("abdc", "abdc", "1234", "Battlefield 2")
("bnmp", "nbmp", "1231", "Battlefield 2")
("server12", "server21", "1231", "Battlefield 2")
("qwef", "qsdf", "1231", "Battlefield 2")


Any Idea how to store the data like the above.


~Chinmaya