You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VS2022中使用QtSql出现LNK2019/LNK1104错误的解决方法

在VS2022中使用Qt VS Tools开发C++项目时QtSql库链接错误的解决方法

问题现象

  • 已包含<QSqlDatabase>、<QSqlError>、<QSqlQuery>等头文件,启动Windows调试器时出现LNK2019未解析外部符号错误。
  • 手动添加Qt5Sql.lib和Qt5Sqld.lib到链接器输入后,又出现LNK1104无法打开文件错误。

错误信息1(LNK2019)

Severity          : Error
Code              : LNK2019
Description       : unresolved external symbol "__declspec(dllimport) public: __cdecl QSqlDatabase::QSqlDatabase(void)" (_`_`imp`_`??0QSqlDatabase@@QEAA@XZ) referenced in function "private: void __cdecl LoginPage::onLoginButtonClicked(void)" (?onLoginButtonClicked@LoginPage@@AEAAXXZ)
Project           : StockManager
File              : D:\POO-P\StockManager\StockManager\LoginPage.obj
Line              : 1
Suppression State :

错误信息2(LNK1104)

Code        : LNK1104
Description : cannot open file 'Qt5Sqld.lib'
Project     : StockManager
File        : D:\POO-P\StockManager\StockManager\LINK
Line        : 1

相关代码

头文件(LoginPage.h)

#pragma once

#include <QWidget>
#include <QPushButton>
#include <QLineEdit>
#include <QVBoxLayout>
#include "ui_LoginPage.h"
#include <QtSql/QSqlDatabase>
#include <QtSql/QSqlError>
#include <QtSql/QSqlQuery>

class LoginPage : public QWidget
{
    Q_OBJECT

public:
    explicit LoginPage(QWidget* parent = nullptr);

    QPushButton* getLoginButton() const { return loginButton; }
    QPushButton* getRegisterButton() const { return registerButton; }
    bool createConnection();
   
    ~LoginPage();

private slots:
    void onLoginButtonClicked();
    void onRegisterButtonClicked();

signals:
    void authenticationSuccessful();

private:
    QPushButton* loginButton;
    QPushButton* registerButton;
    QLineEdit* usernameLineEdit;
    QLineEdit* passwdLineEdit;
    Ui::LoginPageClass* ui;
};

源文件(LoginPage.cpp)

#include "LoginPage.h"

LoginPage::LoginPage(QWidget* parent) : QWidget(parent), ui(new Ui::LoginPageClass)
{
    ui->setupUi(this);
    ui->passwdLineEdit->setEchoMode(QLineEdit::Password);

    loginButton = ui->loginButton;
    registerButton = ui->registerButton;

    createConnection();

    connect(ui->loginButton, &QPushButton::clicked, this, &LoginPage::onLoginButtonClicked);
    connect(ui->registerButton, &QPushButton::clicked, this, &LoginPage::onRegisterButtonClicked);
}


bool LoginPage::createConnection() {
    QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
    db.setHostName("BOGDAN");
    db.setDatabaseName("Driver={SQL Server Native Client 11.0};Server=BOGDAN;Database=StockManager;Trusted_Connection=yes;");

    if (!db.open()) {
        qDebug() << "Connection failed" << db.lastError().text();
        return false;
    }
    else {
        qDebug() << "Successfully connected!";
        return true;
    }
}


void LoginPage::onLoginButtonClicked()
{
    QString username = ui->usernameLineEdit->text();
    QString password = ui->passwdLineEdit->text();

    QSqlQuery query;
    query.prepare("SELECT * FROM Users WHERE Username = :username AND Password = :password");
    query.bindValue(":username", username);
    query.bindValue(":password", password);
    if (query.exec() && query.next()) {
        emit authenticationSuccessful();
    }
    else {
        // Invalid login
    }
}

void LoginPage::onRegisterButtonClicked()
{
    // ... codul tău aici
}

LoginPage::~LoginPage() {
    // nu mai este necesar să ștergi ui manual
}

解决方案

1. 用Qt VS Tools自动配置Sql模块

不要手动添加lib文件,Qt VS Tools会自动处理依赖:

  • 右键项目 → Qt Project Settings
  • 在Qt Modules选项卡中,找到并勾选sql模块
  • 点击确定,VS会自动添加匹配的库文件和路径

2. 对齐项目与Qt的编译模式

  • 确认项目的编译模式(Debug/Release)、位数(32/64位)和Qt VS Tools中配置的Qt版本完全一致
  • Debug模式下Qt会自动链接带d后缀的库(如Qt5Sqld.lib),Release模式链接不带d的版本,手动添加会导致模式不匹配

3. 检查Qt安装的Sql组件

  • 打开Qt VS Tools的Qt Options,确认已添加的Qt版本路径正确
  • 查看Qt安装目录\5.x.x\msvc2019_64\lib目录,若缺失对应lib文件,说明安装Qt时未勾选Qt SQL组件,重新运行Qt安装程序补装

4. 清理重建项目

  • 执行生成 → 清理解决方案
  • 再执行生成 → 生成解决方案,清除旧编译缓存的影响

内容的提问来源于stack exchange,提问作者bobodrg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 17:57:40