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

Я создаю простое приложение 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?

0

Решение

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

e.g.1

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

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

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

Вы также можете посмотреть на вещи, связанные с «Внедрение зависимости»

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]