Не подключается база данных

Нужно в виджет добавить кнопки, их названия нужно брать из базы данных.

testselection.h

#ifndef TESTSELECTION_H
#define TESTSELECTION_H


#include <QWidget>
#include <QPushButton>
#include <QString>
#include <QVBoxLayout>
#include <QtSql/QSqlDatabase>
#include <QtSql/QSqlQuery>
#include <QVariant>


class TestSelection : public QWidget
{
    Q_OBJECT
public:
    explicit TestSelection(QWidget *parent = nullptr);

public slots:
    void _sh();
signals:
    void onClosed();

private:
    QPushButton* createButton(const QString &BtnName, size_t PixHor, size_t PixVert);
    QVBoxLayout* mainLayout;
    QSqlDatabase db;

};

#endif // TESTSELECTION_H

testselection.cpp

#include "testselection.h"

TestSelection::TestSelection(QWidget *parent) : QWidget(parent)
{
       mainLayout = new QVBoxLayout(this);
       db = QSqlDatabase::addDatabase("QPSQL");
       db.setHostName("195.19.32.74");
       db.setDatabaseName("fn1132_2020");
       db.setPort(5432);
       db.setUserName("student");
       db.setPassword("psqwd");
       QSqlQuery query(db);
       query.exec("SELECT name FROM tests");
       QList <QVariant> listNames = query.value("name").toList();
       QVector<QPushButton*> btns;
       for (auto & qvar: listNames)
       {
           QPushButton *curr_btn = new QPushButton(qvar.toString());
           btns.push_back(curr_btn);
       }
       for(auto & btn: btns)
       {
           mainLayout->addWidget(btn);
       }

}

void TestSelection::_sh()
{
    this->show();
}

Ответы (1 шт):

Автор решения: Sergey Tatarincev

для начала смотрим отладчик. Не пишет ли он что-то типа

QSqlDatabase: QPSQL driver not loaded

QSqlDatabase: available drivers: QSQLITE .......

Если не пишет, то считаем что драйвер скомпилирован и присутствует. Если нет, то его надо собирать.

Далее, если драйвер все же в списке есть, проверяем наличие необходимых для запуска dll (libpq.dll и прочих)

→ Ссылка