使用QT C 为Sevaral表单创建常见的数据库连接

Creating common database connection for sevaral forms using qt c++

本文关键字:创建 常见 数据库连接 表单 Sevaral QT 使用      更新时间:2023-10-16

我正在创建一个简单的QT应用程序,以提供详细信息并登录应用程序并从数据库中检索详细信息。它主要具有2个表单(mainwindow and Dialog和对话框)DBConncetion类已写入获得数据库连接!我使用DBConnection类通过MainWindow表格提供详细信息来登录应用程序!但是我不知道如何保持我以mainwindow表单打开的连接,并使用它将数据重新授予对话框形式的表观视图。

mycode如下

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表单中的连接中将数据检索到对话框中的TableWidget?

您可以传递对对话框的连接的引用,也可以使连接静态/全局。

例如1

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

而不是参考,您可能还需要使用std::shared_ptr

通过服务定位器模式,建立连接全局/静态的一种很好的方法。该模式使用称为"服务定位器"的中央注册表,该注册表应要求返回执行某个任务所需的信息。

您可能还想研究与"依赖注入"有关的事物