Создание общего подключения к базе данных для нескольких форм с использованием qt C++

Я создаю простое приложение qt для предоставления деталей и входа в приложение и извлечения деталей из базы данных. У него есть в основном 2 формы (MainWindow и Dialog) Класс DBconncetion был написан для получения соединения с базой данных! Я использовал класс DBconnection для входа в приложение, предоставив подробности через форму MainWindow! но я не знаю, как сохранить соединение, которое я открыл в форме MainWindow, и использовать его для получения данных в виде таблицы в форме диалога.

мой код выглядит следующим образом

DBconnection.h (работает успешно)

 public:
        QSqlDatabase mydb;
        bool connOpen(QString uname,QString pword,QString ip,int port,QString dbname){
            mydb=QSqlDatabase::addDatabase("QOCI","MyDB");
            mydb.setUserName(uname);
            mydb.setPassword(pword);
            mydb.setHostName(ip);
            mydb.setPort(port);
            mydb.setDatabaseName(dbname);
            mydb.open();
            return true;

        }

MainWindow.cpp (работает успешно)

void MainWindow::on_pushButton_clicked()
    {
        DBconnection con;
        if(con.connOpen(ui->lineEdit->text(),ui->lineEdit_2->text(),ui->lineEdit_3->text(),ui->lineEdit_4->text().toInt(),ui->lineEdit_5->text())){
            Dialog dialog1;

            dialog1.setModal(true);
            dialog1.exec();

        }
   }

Dialog.cpp (не работает)

void Dialog::on_pushButton_clicked()
{
    QSqlQueryModel *modal = new QSqlQueryModel();
    con.connOpen();

    QSqlQuery* qry=new QSqlQuery(con.mydb);


    qry->prepare("select NAME FROM TEST1");
       qry->exec();
       modal->setQuery(*qry);
       ui->tableView->setModel(modal);

}

Как я могу настроить свой код так, чтобы я мог получить данные для табличного виджета в форме диалога из соединения, которое я сделал из формы MainWindow?

1 ответ

Вы можете либо передать ссылку на соединение в ваш диалог, либо сделать соединение статическим / глобальным.

EG1

class Dialog()
{
  DBconnection &con;
  Dialog(DBconnection &con) : con(con) {};
};

Вместо ссылки вы также можете использовать std::shared_ptr,

Хороший способ сделать соединение глобальным / статическим - использовать шаблон локатора сервиса. Этот шаблон использует центральный реестр, известный как "локатор службы", который по запросу возвращает информацию, необходимую для выполнения определенной задачи.

Вы также можете посмотреть на вещи, связанные с "инъекцией зависимости"

Другие вопросы по тегам