Accessing objects into another class
-
Hello ,
I am new to QT. And started developing very recently. I am stuck with this error. I am creating a Login page using SQLite.
-
I created a DB using SQLite and using the using the credentials from there , I successfully creted a login page with all checks (mathing uname and pword or wrong etc.) (Login.cpp)
-
I now want to create a second dialog box which assists the user in changing the password for the user who entered his/her credentials on the first page (ChangePword.cpp)
-
I created an object of Login.cpp in the ChangePword.h file . So that I can check against the credentials entered in the first page by the user.
I am not sure if this is the right thing to do, the code does not work and causes an abrupt end to the program
Can anybody help me with this
-
-
Hi and welcome to devnet,
What abrupt end do you have ?
Did you run your software through the debugger ?
-
Hello SGaist,
Thanks for the response:I have 2 files one loginfromdb.c and another dialogpword.c.
The loginfromdb is the main window that asks for user login and password and all worked correctly. I have declared the variables uname and pword in the public section LoginfromDB class
@
LoginfromDB::LoginfromDB(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::LoginfromDB)
{
ui->setupUi(this);myDB = QSqlDatabase::addDatabase("QSQLITE"); myDB.setDatabaseName("C:/SQLite/EmployeeInfo.sqlite"); if(!myDB.open()) ui->label->setText("Failed connection to the DataBase"); else ui->label->setText("Connected.........");
}
LoginfromDB::~LoginfromDB()
{
delete ui;
}void LoginfromDB::on_pushButton_clicked()
{
// QString uname, pword;
uname = ui->lineEdit_uname->text();
pword = ui->lineEdit_pword->text();QMessageBox::StandardButton reply; DialogPword mdialog; if(!myDB.isOpen()) { qDebug() << "Failed to open DataBase"; return; } QSqlQuery qry; if(qry.exec("select * from employee where Username = '"+uname+"' and Password = '"+pword+"'")) { int count = 0; while(qry.next()) { count++; } if(count == 1) { ui->label->setText("Username and Password is correct"); reply = QMessageBox::question(this,"Ask","Do you want to change your password ?",QMessageBox::Yes | QMessageBox::No); if(QMessageBox::Yes == reply) { mdialog.setModal(true); mdialog.exec(); } else QMessageBox::information(this,"Close","No Problem"); } if(count > 1) ui->label->setText("Duplicate Username and Password"); if(count == 0) ui->label->setText("Username and Password is incorrect"); }
}
@As a second step I added another page (dialog) so as to ask user to change password.
I declared a object of the LoginfromDb class in the private section of the file dialogpword.h
LoginfromDB loginDB;
I have commented the rest of the code in dialogpword.c (changing passwords etc)
The program compiles fine, but when I enter the details of Username and password in the first window and click login I get this error
QSqlDatabasePrivate::removeDatabase: connection 'qt_sql_default_connection' is still in use, all queries will cease to work.
QSqlDatabasePrivate::addDatabase: duplicate connection name 'qt_sql_default_connection', old connection removed.
Failed to open DataBaseand the a window appears with this mesage
A problem caused the program to stop working correctly. Windows will close the program and notify you if a solution is available
[edit: added missing coding tags @ SGaist]
-
It should not crash for that (the run through the debugger should tell you where exactly it happened)
For the connection error. You are recreating the database setup each time you create a LoginfromDB thus the error. The database initialization should only be done once e.g. in the main.cpp. Have a look at the SQL example to see how to use QSqlDatabase
-
Hello SGaist,
I started all over again and it is working a bit better than last attempt.
I have created a login page (Login.cpp) and a change password page (password.cpp) .
The first login page works fine asking and verifying user credentials with SQLite data base. I have created the open and close functions for the data base in the public section of login.h, so that I can access the same in the password.cpp
Now in the second password.h file I have created a Login login object , which gives this error ,
'Login does not name a type' ,I have included the necessary header files in the .h files of each of these files. But still the error
How to create an object of a class in another class?
Can you please suggest something ?
-
Just setup your database and open it once e.g. in your main function. There's no need to close/open it every time you want to access it unless you have a very good reason