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 -
"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