0

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

我的代码如下

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 表单中的 tablewidget?

4

1 回答 1

1

您可以将连接的引用传递给您的对话框,或者使连接成为静态/全局的。

例如1

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

除了引用,您可能还想使用std::shared_ptr.

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

您可能还想查看与“依赖注入”相关的内容

于 2017-09-18T07:11:23.800 回答