Qt编程中遇到的问题及解决办法

来源:互联网 发布:新野美工设计培训中心 编辑:程序博客网 时间:2024/06/02 06:29

    • 无法解析的外部符号
    • 获取屏幕尺寸的函数
    • 链接SQL Server数据库失败
    • 找不到MySQL驱动
    • Linux静态编译Qt580配置

1. 无法解析的外部符号

LNK2019:无法解析的外部符号 “public” LNK1120:1个无法解析的外部命令

经常遇到类似的错误,将该项目的编译文件删除后再次编译运行即可。

2. 获取屏幕尺寸的函数:

QApplication::desktop()->size();

3. 链接SQL Server数据库失败

ODBC 数据源管理器 未发现数据源或……

若是出现上述警告,打开 控制面板->系统和安全->管理工具->ODBC数据源,添加一个DNS,驱动程序选择SQL Server名称随意(在连接数据库时要使用,setDatabaseName()的参数),原则自己的服务器 ,注意勾选 更改默认的数据库 选择为自己在SQL Server中建的数据库。完成后即可成功连接。
详细请参见:http://www.educity.cn/wenda/284013.html

4.找不到MySQL驱动

QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3 QODBC QODBC3 QPSQL QPSQL7

出现这个问题时我在用Qt5.5.1,虽然已自带了MYSQL驱动,但因与我的MySQL版本不符,所以仍显示QMYSQL driver not loaded。解决办法是重新编译MySQL驱动:

  1. 先确保你有Qt的源代码和完整的MySQL
  2. 打开Qt的命令行终端:Qt 5.5 for Desktop,输入:

    (1).

    C:\app\Qt5.5.1\5.5\Src\qtbase\src\plugins\sqldrivers\mysql

    注意:应将C:\app\Qt5.5.1改为你的Qt安装目录
    这里写图片描述

    (2).

    qmake “INCLUDEPATH+=D:\mysql-5.6.24-win32\include” “LIBS+=D:\mysql-5.6.24-win32\lib\libmysql.lib” -o Makefile mysql.pro

    注意:应将D:\mysql-5.6.24-win32改为你的MySQL安装目录
    这里写图片描述

    (3).

    mingw32-make

    这里写图片描述
    如果输入无误会进行一系列编译。静候其完成即可。

  3. 将C:\app\Qt5.5.1\5.5\Src\qtbase\plugins\sqldrivers文件夹下编译生成的qsqlmysql.dll 和 qsqlmysqld.dll 文件复制到C:\app\Qt5.5.1\5.5\mingw492_32\plugins\sqldrivers

    另外,生成两个.dll的文件夹里还有两个.a文件。貌似是Qt开发安卓连接MySQL时要用到的动态库,可以保存着备用。

  4. 将 D:\mysql-5.6.24-win32\lib文件夹中的libmysql.dll文件复制到C:\app\Qt5.5.1\5.5\mingw492_32\bin
  5. 如果操作无误就完成了,可以试一下如果不出现driver not loaded就是对啦。
#include "mainwindow.h"#include <QApplication>#include <QSqlDatabase>#include <QSqlError>#include <QDebug>int main(int argc, char *argv[]){    QApplication a(argc, argv);    QSqlDatabase mysql = QSqlDatabase::addDatabase("QMYSQL");    mysql.setHostName("localhost");    mysql.setDatabaseName("test");    mysql.setUserName("name");    mysql.setPassword("pwd");    qDebug() << "是否打开MySQL数据库:" << mysql.open();    QSqlDatabase sqlite = QSqlDatabase::addDatabase("QSQLITE");    sqlite.setDatabaseName("test");    qDebug() << "是否打开SQLite数据库:" << sqlite.open();    MainWindow w;    w.show();    return a.exec();}

5.Linux静态编译Qt5.8.0配置

./configure -prefix /home/zzf/Qt5.8.0/5.8/5.8_Static -release -c++std c++11 -static -qt-sqlite -no-qml-debug -platform linux-g++-64 -qt-zlib -no-journald -qt-libpng -qt-libjpeg -skip qtsensors -skip qtdoc -nomake tools -nomake examples -nomake tests

参考:http://www.mamicode.com/info-detail-1433017.html

0 0
原创粉丝点击