gpt4 book ai didi

c++ - 使用 qt c++ 为多种形式创建公共(public)数据库连接

转载 作者:行者123 更新时间:2023-11-28 05:00:01 26 4
gpt4 key购买 nike

我正在创建一个简单的 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?

最佳答案

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

例1

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

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

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

您可能还想查看与 "Dependency injection" 相关的内容

关于c++ - 使用 qt c++ 为多种形式创建公共(public)数据库连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46273164/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com