我正在尝试使用OOP概念在Qt中建立数据库连接。我有一个单独的databaseconnection类和databaseconnection头文件。
#ifndef DATABASECONNECTION
#define DATABASECONNECTION
bool dbcon();
#endif // DATABASECONNECTION
此Login.h文件
#include <QFileInfo>
namespace Ui {
class Login;
}
class Login : public QMainWindow
{
Q_OBJECT
public:
explicit Login(QWidget *parent = 0);
~Login();
private slots:
// void on_btnLogin_clicked();
void on_btnCancel_clicked();
void on_btnLog_clicked();
private:
Ui::Login *ui;
};
#endif // LOGIN_H
。这是我的databaseconnection.cpp,它实现了dbcon()。
#include <QtSql/QSqlDatabase>
#include <QtSql/QSqlDriver>
#include <QtSql/QSqlQuery>
#include <QDebug>
#include "databaseconnection.h"
DatabaseConection::DatabaseConection()
{
}
bool DatabaseConection :: dbCon()
{
QSqlDatabase db = QSqlDatabase :: addDatabase("QMSQL");
db.setHostName("localhost");
db.setDatabaseName("library");
db.setUserName("root");
db.setPassword("");
if(!db.open())
{
qDebug()<<"Database error occured";
return false;
}
else
return true;
}
我想在MainWindow中调用此数据库连接方法,而不是在MainWindow中实现连接。这是我的MainWindow课程。
#include <QtSql>
#include <QDebug>
#include <QFileInfo>
#include "login.h"
#include "databaseconection.h"
#include "ui_login.h"
Login::Login(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::Login)
{
ui->setupUi(this);
dbcon();
}
Login::~Login()
{
delete ui;
}
void Login::on_btnLog_clicked()
{
}
void Login::on_btnCancel_clicked()
{
}
虽然我包含了所有头文件但是它给出了一个错误,说dbcon()超出了范围。我不知道如何在MainWindow类中继承databaseconnection类(MainWindow类是login.cpp)
执行某些操作并尝试运行项目后,显示了这一点。我无法弄清楚这个的原因。请帮我解决这个问题。提前致谢
Starting H:\c++Prac\build-Libro-Desktop_Qt_5_5_1_MinGW_32bit-Debug\debug\Libro.exe...
The program has unexpectedly finished.
H:\c++Prac\build-Libro-Desktop_Qt_5_5_1_MinGW_32bit-Debug\debug\Libro.exe crashed
答案 0 :(得分:1)
你的databaseconnection.h声明了一个独立的函数dbcon()
但是在实现文件(cpp)中你定义了一个类DatabaseConection,其中dbcon()
是一个方法
您需要在标头(构造函数等)中正确声明DatabaseConnection类,然后在MainWindow中,您可以实例化该类型的类并使用该方法。
答案 1 :(得分:0)
你做错了。试试这个
databaseconnection.h
#ifndef DATABASECONNECTION
#define DATABASECONNECTION
class DatabaseConnection
{
public:
DatabaseConnection() {}
bool dbcon() const;
};
#endif //DATABASECONNECTION
databaseconnection.cpp
bool DatabaseConnection::dbcon() const
{
QSqlDatabase db = QSqlDatabase :: addDatabase("QMSQL");
db.setHostName("localhost");
db.setDatabaseName("library");
db.setUserName("root");
db.setPassword("");
if(!db.open()) {
qDebug()<<"Database error occured";
return false;
} else {
return true;
}
}
现在,您有两种选择。
login.h
#include "databaseconnection.h"
class Login : public QMainWindow, public DatabaseConnection
{
Q_OBJECT
...
};
login.cpp
Login::Login(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::Login)
{
ui->setupUi(this);
dbcon();
}
login.h
#include "databaseconnection.h"
class Login : public QMainWindow
{
Q_OBJECT
...
private:
DatabaseConnection dbConnection;
};
login.cpp
Login::Login(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::Login),
dbConnection()
{
ui->setupUi(this);
dbConnection.dbcon();
}