1

我对 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) 主窗口.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

我的输出总是“失败”。我究竟做错了什么?

4

1 回答 1

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();
}

祝你好运!

于 2013-02-09T12:12:30.620 回答