我对Qt很新。我正在尝试使用Qt建立MySQL数据库连接并显示表信息QSqlTableModel。这是我的代码:
1).pro文件
QT += core gui sql
TARGET = sri_qtdb
TEMPLATE = app
SOURCES += main.cpp\
mainwindow.cpp
HEADERS += mainwindow.h
FORMS += mainwindow.ui
2).h文件
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QDebug>
#include <QtSql>
#include <QtGui>
#include <QtCore>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow {
Q_OBJECT
public:
MainWindow(QWidget *parent = 0);
~MainWindow();
protected:
void changeEvent(QEvent *e);
private:
Ui::MainWindow *ui;
QSqlDatabase db;
QSqlTableModel *model;
//QTableWidget *table;
};
#endif // MAINWINDOW_H
3).cpp文件
a)main.cpp
#include <QtGui/QApplication>
#include "mainwindow.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
b)mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
this->setCentralWidget(ui->tableView);
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("localhost");
db.setDatabaseName("user");
db.setUserName("root");
db.setPassword("*********");
if(!db.open()){ qDebug()<< "Failed"; }
else
{
model = new QSqlTableModel(this);
model->setTable("new_joiners");
model->select();
ui->tableView->setModel(model);
}
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::changeEvent(QEvent *e)
{
QMainWindow::changeEvent(e);
switch (e->type()) {
case QEvent::LanguageChange:
ui->retranslateUi(this);
break;
default:
break;
}
}
可用驱动程序:QSQLITE QMYSQL3 QMYSQL
我的输出始终为“失败”。我做错了什么?
答案 0 :(得分:2)
首先,在localhost
和所有参数上重新检查您的数据库。
检查您是否确实需要驱动程序:
QStringList driverList;
driverList = QSqlDatabase::drivers();
if (!driverList.contains("QMYSQL", Qt::CaseInsensitive))
qDebug()<<"No QMYSQL support! Check all needed dll-files!";
else
qDebug()<<"QMYSQL support is avaiable.";
编写代码以使其具体并使用调试功能。例如,如果连接到DB时出错,则以这种方式输出上一个错误:
if(!db.open())
{
qDebug()<<"Error while opening DB: " << db->databaseName()
<< db->lastError();
}