C++ 来自另一个类的QT Access主窗口SQLite变量
我的应用程序在主窗口启动时打开SQLite数据库连接,在主窗口被破坏时关闭连接 如何从其他类访问数据库连接。 我想我需要使用单例格式,但还没有实现它 这是我试过的。这是错误的C++ 来自另一个类的QT Access主窗口SQLite变量,c++,qt,sqlite,singleton,C++,Qt,Sqlite,Singleton,我的应用程序在主窗口启动时打开SQLite数据库连接,在主窗口被破坏时关闭连接 如何从其他类访问数据库连接。 我想我需要使用单例格式,但还没有实现它 这是我试过的。这是错误的 C:\Users\cbennett\C++\CA_Letter_Generator\letter.cpp:9: error: expected primary-expression before '.' token QSqlQuery qLetter = MainWindow.getDB().selectAll(
C:\Users\cbennett\C++\CA_Letter_Generator\letter.cpp:9: error: expected primary-expression before '.' token
QSqlQuery qLetter = MainWindow.getDB().selectAll("letters","ltID=" + QString::number(ID));
^
mainwindow.cpp
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
loadButtons();
this->adjustSize();
}
MainWindow::~MainWindow()
{
db.close();
delete ui;
}
void MainWindow::loadButtons(){
db.setDatabaseName(dbPath);
db.open();
//load buttons from db
}
cc_sqlite MainWindow::getDB(){
return db;
}
letter.cpp
Letter::Letter(int ID){
QSqlQuery qLetter = MainWindow.getDB().selectAll("letters","ltID=" + QString::number(ID));
while (qLetter.next()) {
int id = qLetter.value(0).toInt();
QString name = qLetter.value(1).toString();
QString body = qLetter.value(2).toString();
QString sal = qLetter.value(3).toString();
qDebug() << id << name << body << sal;
}
}
Letter::Letter(int-ID){
QSqlQuery qLetter=MainWindow.getDB().selectAll(“字母”,“ltID=”+QString::number(ID));
while(qLetter.next()){
int id=qLetter.value(0.toInt();
QString name=qLetter.value(1.toString();
QString body=qLetter.value(2.toString();
QString sal=qLetter.value(3.toString();
qDebug()MainWindow.getDB()
MainWindow不是指针吗?所以您需要MainWindow->getDB()Letter
如何知道MainWindow
?从您的编辑来看,Letter
似乎与MainWindow
没有任何联系。我想我需要使用一种单例格式,您不需要单例。一种方法是将指向MainWindow
的指针传递到Letter
。第二种方法是做一些事情类似于MainWindow*pMainWindow=QCoreApplication::instance()->findChild();
#ifndef LETTER_H
#define LETTER_H
#include "mainwindow.h"
#include "field.h"
#include "../CC_CPP/cc_sqlite.h"
class Letter
{
public:
Letter();
Letter(int ID);
private:
vector<Field> vFields;
};
#endif // LETTER_H