In case anyone wonders, I found the way to connect both classes and tell mainWidget to change stack through the login widget's button.
//header of the login widget
public slots:
void verifyUser(int iUserCorrect )
{
if ( iUserCorrect != iUserVerified )
{
iUserVerified = iUserCorrect;
emit valueChanged( iUserVerified );
}
}
signals:
void valueChanged( int iUserCorrect );
private slots:
void on_btnLogin_clicked();
private:
Ui::QLogin *ui;
QSqlDatabase sqlUsuarios;
int iUserVerified;
source file of the login widget (only where valueChanged was used, in the SQLite verification):
iUserVerified = 0;
QSqlQuery sqlQry;
if(sqlQry.exec("SELECT User, Password, Role FROM Usuarios WHERE User=\'" + sUsername +
"\' AND Password =\'" + sPassword + "\'"))
{
if(sqlQry.next())
{
ui->lblStatus->setText("Nombre de usuario y contraseña válidos.");
qDebug() << "Usuario OK";
verifyUser(1);
}
and finally, the connect() in the mainWidget source file. Note that I had already made an instance of a promoted login widget inside this file:
#include "mainwidget.h"
#include "ui_mainwidget.h"
#include <qlogin.h>
#include <QMessageBox>
#include <QCalendarWidget>
#include <QDebug>
#include <QPushButton>
mainWidget::mainWidget(QWidget *parent) :
QWidget(parent),
ui(new Ui::mainWidget)
{
mainLayout = new QVBoxLayout();
stackedLayout = new QStackedLayout();
QLogin *loginWidget = new QLogin;
stackedLayout->addWidget(loginWidget);
stackedLayout->addWidget(new QCalendarWidget);
mainLayout->addLayout(stackedLayout);
setLayout(mainLayout);
connect(loginWidget, SIGNAL(valueChanged(int)),
this, SLOT(changeStack()));
ui->setupUi(this);
}
The changeStack method simply changes the index of the stack:
void mainWidget::changeStack()
{
stackedLayout->setCurrentIndex(stackedLayout->currentIndex() + 1);
qDebug() << "changeStack()";
}
Took me some time, but I finally got it.