Создание общего подключения к базе данных для нескольких форм с использованием 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
,
Хороший способ сделать соединение глобальным / статическим - использовать шаблон локатора сервиса. Этот шаблон использует центральный реестр, известный как "локатор службы", который по запросу возвращает информацию, необходимую для выполнения определенной задачи.
Вы также можете посмотреть на вещи, связанные с "инъекцией зависимости"