Error with QList
-
Ok. I wrote a simple source code as follow:
@
struct Login {
QString userName;
QString password;
};
#include <QSettings>void 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(); login.password = settings.value("password").toString(); logins.append(login); } settings.endArray();
}
@This code work for me.
Also make sure you have included QList and QString headers.
-
hey cincirin..I have also written the samething and the error is in savesettings function..
below is my Mainwindow.h@#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QtGui/QMainWindow>
#include <QSettings>
#include <QList>
#include <qlist.h>namespace Ui {
class MainWindow;
}class MainWindow : public QMainWindow
{
Q_OBJECT
public:
struct Login {
QString userName;
QString password;
};enum ScreenOrientation { ScreenOrientationLockPortrait, ScreenOrientationLockLandscape, ScreenOrientationAuto }; explicit MainWindow(QWidget *parent = 0); virtual ~MainWindow(); // Note that this will only have an effect on Symbian and Fremantle. void setOrientation(ScreenOrientation orientation); void showExpanded();
private slots:
void on_set_clicked();private:
Ui::MainWindow *ui;
void readSettings();
void saveSettings();
};#endif // MAINWINDOW_H@
regards
gogoi -
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 -
Hi gogoi
you might have to be a little more specific on your error (message).
-
thanks all error is solved..
regards
gogoi -
Do you mind to enlight us?
How did you solve your problem? -
Her/His list variable was QList<QString> type and not QList<Login> type.
-
hey friends,can anybody help me out in how shall i append the username and passwd data into the list..
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);
@ -
ok thanks cincirin,I will read it and get back to u.
regards
gogoi -
hey cincirin,
suppose i want to take username and password from userinput..then how shall i do it..
I mean..QList<Login> loginsList;
Login login = {ui->lineEdit->text(), ui->lineEdit_2->text()};
loginsList.append(login);regards
gogoi -
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();
}
@ -
thanks cincirin...then how shall i write in writesettings function..because when i debug..the login size is showing zero only
regards
gogoi -
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 -
In your 10 and 13 lines, both line edits will have blank text. Use list.at(i) instead of local login variable.
If your list is member of MainWindow class, or if it's global in MainWindow.cpp, your code should be ok, if you remove line 9. -
hey thanks for the info..i did that,,but no effect ,my .ini file shows only this output..
[logins]
size=0regards
gogoi -
If you have @QList<Login> m_logins@ member in your MainWindow class, and if in read function you'll use m_logins.append, I'm sure that write function will write in ini file as many Login as you appended before.