Error with QList
-
hello cincirin
in the below function..
I am getting error@void MainWindow::saveSettings()
{QList <Login> logins; QList<QString> list; QSettings settings; settings.beginWriteArray("logins"); for (int i = 0; i < logins.size(); ++i) { settings.setArrayIndex(i); settings.setValue("userName", list.at(i).userName);//error settings.setValue("password", list.at(i).password);//error } settings.endArray();}@
regards
gogoi -
"see append function":http://doc.qt.nokia.com/latest/qlist.html#append
In your code ... :
@
QList<Login> loginsList;
Login login = {"userName", "password"};
loginsList.append(login);
@ -
Yes, it's ok.
Or, if you want to add more Logins in your list, create only one instance of Login
@
Login login;login.userName = ui->lineEdit->text();
login.password = ui->lineEdit_2->text();
loginsList.append(login);login.userName = ui->lineEdit->text();
login.password = ui->lineEdit_2->text();
loginsList.append(login);
@ -
@void MainWindow::readSettings()
{QList<Login> logins; QSettings settings; int size = settings.beginReadArray("logins"); for (int i = 0; i < size; ++i) { settings.setArrayIndex(i); Login login; login.userName = settings.value(("userName").toString(),ui->lineEdit->setText()); login.password = settings.value(("password").toString(),ui->lineEdit_2->settext()); logins.append(login); } settings.endArray();}@
can i do it this way cincirin..
regards
gogoi -
No, you can't.
You need to separate @QSettings::value@ from @QlineEdit::setText@
@
void MainWindow::readSettings()
{
QList<Login> logins;
QSettings settings;
int size = settings.beginReadArray("logins");
for (int i = 0; i < size; ++i) {
settings.setArrayIndex(i);
Login login;
login.userName = settings.value(("userName").toString();
ui->lineEdit->setText(login.userName));
login.password = settings.value(("password").toString();
ui->lineEdit_2->settext(login.password));logins.append(login); } settings.endArray();}
@ -
In a similar manner as read settings.
But I think your problem is that you want to use the same list both in read & write settings. In this case, your problem C++ and not Qt. So, if I'm right, you need to declare QList<Login> member of your class, and not separate instances in read&write functions. -
ya i have not created two instance of QList<login>..
please check out this@void MainWindow::saveSettings()
{QSettings settings; settings.beginWriteArray("logins"); for (int i = 0; i < logins.size(); ++i) { settings.setArrayIndex(i); settings.setValue("userName", list.at(i).userName); Login login; ui->lineEdit->settext(login.userName); settings.setValue("password", list.at(i).password); ui->lineEdit_2->settext(login.password); } settings.endArray();}
@regards
gogoi -
No cincirin..I coded the 2 functions according to your suggestions..but its not entering the loop in the savesettings function..and everytime it says size=0;//
so i think on click of a button we shouls set the username and passwd..
this way..
@void MainWindow::on_set_clicked()
{login.userName=ui->lineEdit->text(); login.password=ui->lineEdit_2->text(); logins.append(login);}@
i dont know whether i m right or wrong..u please just check out//
regards
gogoi -
Ok, in the following code if you call Test::count function, you'll see as many Login as you appended:
@
class Test
{
public:
void append();
int count()const;protected:
struct Login
{
QString userName;
QString password;
};QList<Login> m_loginsList;};
void Test::append()
{
Login log = {"user", "pwd"};
m_loginsList.append(log);
}int Test::count()const
{
return m_loginsList.size();
}int main(int argc, char *argv[])
{
Test t;
t.append(); // one item
t.append(); // two items
// ...
qDebug("%d", t.count()); // print how many items are in list
return 0;
}
@