使用qt c ++为sevaral表单创建公共数据库连接

时间:2017-09-18 06:50:35

标签: c++ database qt connection sametime

我正在创建一个简单的qt应用程序来提供详细信息并登录到应用程序并从数据库中检索详细信息。它主要有2个表单(MainWindow和Dialog)已经编写了DBconncetion类来获取数据库连接! 我使用DBconnection类通过MainWindow表单提供详细信息来登录应用程序!但我不知道如何保持我在MainWindow表单中打开的连接,并使用它以对话框形式将数据检索到tableview。

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表单建立的连接中以Dialog格式检索数据到表格小部件?

1 个答案:

答案 0 :(得分:1)

您可以将对连接的引用传递给对话框,也可以将连接设置为static / global。

e.g.1

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

您可能还想使用std::shared_ptr

,而不是引用

使连接全局/静态的一种好方法是通过Service locator pattern。此模式使用称为"服务定位器"的中央注册表,根据请求返回执行特定任务所需的信息。

您可能还想查看与"Dependency injection"

相关的内容