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

まず、DB atlocalhostとすべてのパラメーターを再確認してください。


本当にドライバーが必要かどうかを確認します。

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 に答える