Chcę przesłać adres obiektu do innego obiektu - wiem, że to podstawy ale mam z tym problem, bo niby rozumiem ale jeżeli przychodzi co do czego, to okazuje się, że robię błąd i nie wiem gdzie on jest.
Otóż mam taką klasę
class AccessToDB : public QSqlDatabase
{
public:
AccessToDB();
~AccessToDB();
bool connectDB();
QSqlDatabase &addressDB();
private:
QSqlDatabase db;
QSqlError errorConnectDB;
};
definicje tej klasy są takie
AccessToDB::AccessToDB()
{
db = QSqlDatabase::addDatabase("QSQLITE");
db.setHostName("127.0.0.1");
db.setDatabaseName("dbSpIT.db");
db.setUserName("");
db.setPassword("");
}
bool AccessToDB::connectDB()
{
if(db.open()==true){
qDebug()<< "Database is open" << db.driver() << db.driverName() << db.isOpen();
return true;
}
else{
errorConnectDB = db.lastError();
qDebug()<< "Database not open" << errorConnectDB.text();
return false;
}
}
QSqlDatabase &AccessToDB::addressDB()
{
qDebug()<<"address db is"<< &db;
return db;
}
AccessToDB::~AccessToDB()
{
db.close();
}
w funkcji głównej MainWindow
w ten oto sposób wywołuję tą funkcję
accessDB = new AccessToDB();
accessDB->connectDB();
do tej pory jest OK ale mam potrzebę przesłać ten adres dalej do zupełnie innej klasy, która wygląda tak
BorrowingUsersWindow::BorrowingUsersWindow(QWidget *parent) : QDialog(parent)
{
this->resize(400,300);
this->setWindowTitle(QString(tr("Dodawanie użytkownika wypożyczającego")));
mainLayout = new QVBoxLayout(this);
lblNameSurnameHLayout = new QHBoxLayout();
lblName = new QLabel(this);
lblName->setText(QString(tr("Imię")));
lblSurname = new QLabel(this);
lblSurname->setText(QString(tr("Nazwisko")));
leEdtNameSurnameHLayout = new QHBoxLayout();
leEdtName = new QLineEdit(this);
leEdtSurname = new QLineEdit(this);
modelSqlProducer = new SqlQueryModelProducer(this, dbConn);
tblViewUserData = new QTableView(this);
tblViewUserData->setModel(modelSqlProducer);
bttHLayout = new QHBoxLayout();
bttAdd = new QPushButton(this);
bttAdd->setText(QString(tr("Dodaj")));
bttQuit = new QPushButton(this);
bttQuit->setText(QString(tr("Zamknij")));
bttRem = new QPushButton(this);
bttRem->setText(QString(tr("Usuń")));
lblNameSurnameHLayout->addWidget(lblName);
lblNameSurnameHLayout->addWidget(lblSurname);
leEdtNameSurnameHLayout->addWidget(leEdtName);
leEdtNameSurnameHLayout->addWidget(leEdtSurname);
bttHLayout->addWidget(bttAdd);
bttHLayout->addWidget(bttRem);
bttHLayout->addWidget(bttQuit);
mainLayout->addLayout(lblNameSurnameHLayout);
mainLayout->addLayout(leEdtNameSurnameHLayout);
mainLayout->addWidget(tblViewUserData);
mainLayout->addLayout(bttHLayout);
QObject::connect(bttQuit, &QPushButton::clicked, this, &QDialog::close);
}
QSqlDatabase *BorrowingUsersWindow::setConnect(QSqlDatabase &connect)
{
qDebug()<<"adres db"<< &connect; //tutaj chcę odebrać ten adres
dbConn = &connect;
return dbConn;
}
pytanie jest takie, jak prawidłowo przesłać adres utworzonego obiektu accessDB = new AccessToDB();
do zupełnie innego obiektu QSqlDatabase *BorrowingUsersWindow::setConnect(QSqlDatabase &connect)
bo chcę w poniższym modelu wyświetlić tabelę
Model SQL
SqlQueryModelProducer::SqlQueryModelProducer(QObject *parent, QSqlDatabase *dbConnect) : QSqlQueryModel{parent}
{
qDebug()<< "addr" << dbConnect;
QSqlDatabase db = QSqlDatabase::addDatabase(dbConnect->driver(), dbConnect->connectionName()); //tutaj mam segmentation fault
// QString userData = "SELECT pIDuserWyp, pImie, pNazwisko FROM tUzytkownicyWypozyczajacy";
// queryUserData = new QSqlQuery(userData, db);
// if(queryUserData->exec()==true){
// qDebug()<< "zapytanie wykonane";
// while(queryUserData->next()){
// QSqlRecord rec = queryUserData->record();
// QVariant var = rec.value(0);
// qDebug()<< var.toString();
// }
// }
// else{
// qDebug()<< "coś poszło nie tak z wykonaniem zapytania";
// }
}
PS. Być może pytanie zadaję źle no ale póki co chciałbym zobaczyć co odpowiecie, bo może dobrze zobrazowałem problem, jeżeli nie, to przemyślę jeszcze raz zadanie pytania