如何在主函数中连接到数据库,然后从其他函数引用它
how can I make a connection to a database in the main function and then reference it from other functions
我最近开始深入研究用C++和amp;Qt,我有一个问题。我知道答案可能很基本,但我似乎想不通。
如何连接到主函数中的数据库,然后从其他函数引用它?
基本上,当程序第一次启动时,我会创建一个主窗口的实例,但在显示它之前,我会连接到一个数据库,以便稍后查询。然后我展示窗户。很好,但当我试图用数据填充窗口时,我做不到,因为连接名称超出了函数的范围。
我怎么能让它成为全局的,我认为它是默认的,因为我已经在主函数中构建了数据库,其他所有类或函数都应该从中继承(或者至少我认为)。
我还在学习,所以我相信这只是我对继承如何运作的一个小误解。
这是我的主要功能
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
db.setHostName("LOCALHOST\TestServer");
db.setDatabaseName("TestConnection");
w.show();
return a.exec();
}
稍后在主窗口中,我创建了一个dock,可以用从数据库中提取的数据填充它。以下是我需要在主窗口中预处理查询::Createdock函数
void MainWindow::createDockWindows()
{
QDockWidget *rightDock = new QDockWidget(tr("Tasks"),this);
rightDock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
todoGroupBox = new QGroupBox(rightDock);
todoGroupBox->setTitle(tr("To-Do List"));
QSqlDatabase(db.open());
if (db.open())
{
QMessageBox::information(this,"Connected","Connection to the Database was Establishedn"
"nStatus: Connected");
}
else
{
QMessageBox::information(this,"Not Connected","Connection to the Database could not be Establishedn"
"nStatus: Not Connected");
}
todoList = new QListWidget(todoGroupBox);
todoList->addItems(QStringList()
<< "Install Outlook on Jessies Computer"
<< "Purchase 2 Licenses of Adobe Suite"
<< "Contact UPS to put in a ticket to their IT dept.");
addToDoLabel = new QLabel;
addToDoLabel->setText(tr("Sample Text"));
addToDoButton = new QToolButton;
addToDoButton->setIcon(QIcon(":/images/gedit-icon.png"));
addToDoButton->setToolTip(tr("Create a new task"));
addToDoButton->setShortcut(tr("Ctrl+Shift+t"));
QHBoxLayout *todoButtonLayout = new QHBoxLayout();
todoButtonLayout->addWidget(addToDoLabel,0,Qt::AlignRight | Qt::AlignVCenter);
todoButtonLayout->addWidget(addToDoButton,0,Qt::AlignRight | Qt::AlignTop);
QVBoxLayout *todoLayout = new QVBoxLayout();
todoLayout->addWidget(todoList,0,Qt::AlignCenter);
todoLayout->addLayout(todoButtonLayout,0);
todoGroupBox->setLayout(todoLayout);
todoGroupBox->setMaximumSize(todoGroupBox->sizeHint());
}
在QT中执行此操作的最简单方法是命名数据库连接:
使用QT创建add
数据库时,可以调用addDatabase()
指定数据库连接名称。当您这样做时,您可以在任何类中使用database()
,并为您在main()
中创建的数据库句柄或代码中的任何其他位置提供数据库句柄,因为这两个方法都是静态的。
示例
db = QSqlDatabase::addDatabase("QODBC", "MyDB");
db.setDatabaseName("DRIVER={Microsoft Access Driver (*.mdb)};FIL={MS Access};DBQ=myaccessfile.mdb");
if (db.open()) {
// success!
}
然后在代码中的任何地方你都可以做:
QSqlDatabase localdb = QSqlDatabase::database("MyDB");
它会给你上面打开的那个把手。
相关文章:
- 为什么我的递归函数按降序打印,然后按升序打印?
- 等待整个 omp 块完成,然后再调用第二个函数
- 如何为 std::vector 分配内存,然后稍后为某些元素调用构造函数?
- 为什么 ComPtr 的函数返回不同的值,然后 &?
- 在C++中编程,将 3 个数字发送到一个函数,然后计算这 3 个数字的平均函数
- 如何将子类作为函数的参数传递给期望基类,然后将该对象传递到指向这些抽象类对象的指针向量中?
- 如何在C++中获取lua函数作为参数,然后调用它
- 如何在类中制作 2D 数组元素,然后在其构造函数中指定其维度?
- 钩/绕道 d3d9 (现在/结束场景) - 似乎调用我的函数然后崩溃
- 使用函数打开文件,然后让其他函数利用该文件?
- C++:将向量传递给函数,然后在main中调用函数.错过了什么
- 努力将指向成员函数的指针绑定到类模板的T成员,然后在槽中调用
- 将函数应用于元组中的每个元素,将每个元素强制转换为类型包中的不同类型,然后作为参数包传递
- 是否可以将多个结构作为一个数据包存储在一个函数中,然后传递给其他函数并在那里提取?
- C++大括号初始值设定项作为参数调用不同的构造函数,然后预期
- C++ 如何创建 2D 数组,将其传递给另一个函数,然后打印
- 如何在 LLVM 传递期间破坏然后解散函数?
- 我的单例中的数组在离开函数后没有保留信息,然后在尝试再次访问信息时崩溃
- 需要在调用函数然后检查errno之前清理errno
- 声明一个没有内容的函数;-然后是内容{}- c++