Qt:无法打开包含文件:"QtSql":没有这样的文件或目录

Qt : Cannot open include file: 'QtSql': No such file or directory

本文关键字:文件 包含 QtSql Qt      更新时间:2023-10-16

这可能是一个重复的问题,但建立的答案并没有解决我的问题。我试图在QT中创建客户端服务器应用程序,其中客户端向服务器发送字符串消息代码,服务器必须连接到sql server数据库并检索相对于客户端的消息代码的数据。下面是我目前写的服务器部分。但我得到这个错误:无法打开包含文件:'QtSql':没有这样的文件或目录。当我制作单独的项目并运行数据库部分时,它工作完美,但当我把它们放在一起时,它失败了。谁有什么建议可以解决这个问题?

ServerSocket.pro

QT       += core
QT       += network
QT       += sql
QT       -= gui
TARGET = ServerSocket
CONFIG   += console
CONFIG   -= app_bundle
TEMPLATE = app

SOURCES += main.cpp 
    server.cpp
HEADERS += 
    server.h

ServerSocket.h

#ifndef SERVER_H
#define SERVER_H
#include <QObject>
#include <QDebug>
#include <QTcpServer>
#include <QTcpSocket>

class Server : public QObject
{
    Q_OBJECT
public:
    explicit Server(QObject *parent = 0);
signals:
public slots:
    void newConnection();
private:
    QTcpServer *server;
};
#endif // SERVER_H

ServerSocket.cpp

#include "server.h"
#include <QtSql>
Server::Server(QObject *parent) :
    QObject(parent)
{
    server = new QTcpServer(this);
    connect(server, SIGNAL(newConnection()),this,SLOT(newConnection()));
    if(!server->listen(QHostAddress::Any,1234)){
        qDebug() << "Server could not start";
    } else {
        qDebug() << "Server started";
    }
}
void Server::newConnection(){
    QTcpSocket *socket = server->nextPendingConnection();
    socket->write("hello client");
    socket->waitForBytesWritten(1000);
    socket->waitForReadyRead(1000);
    QString appCode = socket->readAll();
    QString servername = "LOCALHOST\SQLEXPRESS";
    QString dbname = "ApplicationsDB";
    QString connectionTemplate = "DRIVER={SQL SERVER};SERVER=%1;DATABASE=%2;";
    QSqlQuery query;
    QStringList results;

    QString connectionString = connectionTemplate.arg(servername).arg(dbname);
    QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
    db.setDatabaseName(connectionString);
    if (db.open())
    {
        qDebug() << "Opened";
        query = db.exec("select Code from Application a where a.Name = '") + appCode + "';";
        while (query.next())
        {
            QString result = query.record().value(0).toString();
            results.append(result);
        }
        for(QString res : results){
            qDebug() << res;
        }
    }
    else
    {
        qDebug() << "Error = " << db.lastError().text();
    }
    db.close();
}

这些对我来说似乎都很好。请确保qmake重新正常运行。

必须显式地完成,不幸的是,因为当您修改项目文件时,它还不能自动识别何时应该重新运行。