Error with QList
-
Hello friends,I am trying to execute the code given in Qtdocs..
@#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QtCore/QCoreApplication>
#include <QFileInfo>
#include <QList>
#include <qlist.h>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent), ui(new Ui::MainWindow)
{
ui->setupUi(this);
readSettings();
}MainWindow::~MainWindow()
{
saveSettings();
delete ui;
}void MainWindow::readSettings()
{struct Login { QString userName; QString password; };
template < typename T>;
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();
}
void MainWindow::saveSettings()
{
struct Login {
QString userName;
QString password;
};
template<typename T>;
QList <Login> logins;QSettings settings; settings.beginWriteArray("logins"); for (int i = 0; i < logins.size(); ++i) { settings.setArrayIndex(i); settings.setValue("userName", list.at(i).userName); settings.setValue("password", list.at(i).password); } settings.endArray(); }@
But I am getting the below errors.
bq. error: template argument for 'template<class T> class QList' uses local type 'MainWindow::readSettings()::Login'
error: trying to instantiate 'template<class T> class QList'
error: invalid type in declaration before ';' token
error: request for member 'append' in 'logins', which is of non-class type 'int'Can anybody help me out ?
Regards
gogoi -
Try to put your Login struct at the beginning of your source code, or in mainwindow.h
Also, is not necessary to instantiate logins object with template<typename T>. If you just write @QList<Login>@ should be ok. -
hey thanks cincirin,for your reply,I declared the struct in class in mainwindow.h and made it public.No I am getting on error as list is not declared..So i declared it below way
QList<QString>list;But Now again I get a error
bq. error: 'const class QString' has no member named 'userName'
error: 'const class QString' has no member named 'password'regards
gogoi -
The line @QList<QString>list@ is ok. The problem is elsewhere in your code. Can you show the entire code ? Also why you include QList header twice ?
-
Hello cincirin
entire code i have pasted above only.I included headers twicw by mistake,sorry for that..
regards
gogoi -
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