【问题标题】:MySQL for Qt on MacMac 上用于 Qt 的 MySQL
【发布时间】:2011-11-26 14:39:49
【问题描述】:

我已经浪费了大约 6 个小时试图让 MySQL 与 Qt 一起工作,遵循来自网络的各种说明。我现在想砍掉我的手腕!

有人对如何将 QMYSQL 驱动程序安装到 Qt 中进行简单而详细的解释吗?

我有 Mac 10.6,我是初学者 n00b。

您的帮助将由衷感谢!

萨那。

编辑:

当我执行 grep 时,我得到了以下文件,所以在这些文件中,我将 libqsqlmysql.dylib 复制到所有文件夹中,但我仍然无法编译...我收到一个错误说 @ 987654322@

/Library/Application Support/DivX/QtPlugins/sqldrivers/libqsqlite.dylib 
/Users/pfn368/QtSDK/Assistant.app/Contents/PlugIns/sqldrivers/libqsqlite.dylib
/Users/pfn368/QtSDK/Designer.app/Contents/PlugIns/sqldrivers/libqsqlite.dylib
/Users/pfn368/QtSDK/Desktop/Qt/4.8.0/gcc/plugins/sqldrivers/libqsqlite.dylib
/Users/pfn368/QtSDK/Desktop/Qt/4.8.0/gcc/plugins/sqldrivers/libqsqlite_debug.dylib
/Users/pfn368/QtSDK/Desktop/Qt/474/gcc/plugins/sqldrivers/libqsqlite.dylib
/Users/pfn368/QtSDK/Desktop/Qt/474/gcc/plugins/sqldrivers/libqsqlite_debug.dylib
/Users/pfn368/QtSDK/Madde/sysroots/harmattan-arm-sysroot/usr/lib/qt4/plugins/sqldrivers/libqsqlite.so
/Users/pfn368/QtSDK/Madde/sysroots/harmattan-nokia-arm-sysroot/usr/lib/qt4/plugins/sqldrivers/libqsqlite.so
/Users/pfn368/QtSDK/Maemo/4.6.2/sysroots/fremantle-arm-sysroot-20.2010.36-2-slim/usr/lib/qt4/plugins/sqldrivers/libqsqlite.so
/Users/pfn368/QtSDK/Qt Creator.app/Contents/MacOS/qmlpuppet.app/Contents/PlugIns/sqldrivers/libqsqlite.dylib
/Users/pfn368/QtSDK/Qt Creator.app/Contents/PlugIns/sqldrivers/libqsqlite.dylib
/Users/pfn368/QtSDK/QtSources/4.8.0/plugins/sqldrivers/libqsqlite.dylib
/Users/pfn368/QtSDK/QtSources/4.8.0/plugins/sqldrivers/libqsqlite_debug.dylib
/Users/pfn368/QtSDK/Simulator/Application/simulator.app/Contents/PlugIns/sqldrivers/libqsqlite.dylib
/Users/pfn368/QtSDK/Simulator/Qt/gcc/plugins/sqldrivers/libqsqlite.dylib
/Users/pfn368/QtSDK/Simulator/Qt/gcc/plugins/sqldrivers/libqsqlite_debug.dylib

这是我的 .pro 文件

QT       += sql core gui\
           network

TARGET = mini-stock-exchange
TEMPLATE = app

SOURCES += ./src/main.cpp\
        ./src/mainwindow.cpp

HEADERS  += ./header/mainwindow.h

FORMS    += ./ui/mainwindow.ui

我的包括

#include "./header/mainwindow.h"
#include "ui_mainwindow.h"
#include <QtSql/QSqlDatabase>
#include <QtSql/QSqlQuery>
#include <QFile>
#include <QtSql/QSqlError>
#include <qsqldatabase.h>
#include <QtCore>
#include <QtSql>

调用数据库的代码

QSqlDatabase defaultDB = QSqlDatabase::addDatabase("QMYSQL3");
if ( !defaultDB.isValid() ) {
    qWarning( "Failed to connect to the database driver" );
}
defaultDB.setDatabaseName( "nicu" );
defaultDB.setUserName( "root" );
defaultDB.setPassword( "root" );
defaultDB.setHostName( "http://localhost:8889" );

【问题讨论】:

标签: mysql macos qt


【解决方案1】:

Sana,我会试着救那只手,好吧。

首先,您需要来自 Internet 的 Qt 无处不在的开源包。我不知道您正在运行什么版本的 Qt,但您需要与核心安装相同的版本。

其次,进入源码包并浏览插件,直到找到 sql 驱动程序和 mysql 插件。在这个阶段,请确保您知道您的 mysql 库和包含在哪个路径上,因为您将需要它们。

第三,修改 mysql 插件的 .pro 并将你的 MySql 包含路径添加到 INCLUDEPATH+= 和库到....LIBS+=

第四,在 .pro 上运行 qmake 生成 Makefile,然后制作 make 文件,您将有一些漂亮的 .dylib 小文件看着您,眼睛里充满了喜悦。

第五,有趣的部分,你需要找到其他插件在哪里,这因系统而异。找到它们的最快方法是在终端类型'sudo find / | grep libqsqlite' 它会给你那个位置,那就是你的 Qt sqldrivers 插件目录。复制你刚刚内置的dylib到那里。

应该这样做。它在很多构建和重建中都对我有用。

【讨论】:

  • 我应该安装哪个 MySQL 版本,因为我在我的 MySQL 文件夹下看不到 libmysql.lib 文件!
  • 我确实拥有 ~/QtSDK/QtSources/4.8.0/plugins/sqldrivers 下的 libqsqlmysql_debug.dylib 和 libqsqlmysql.dylib。我的问题是我应该将这些文件复制到哪里?我的 Qt 程序库还是其他地方?
  • 请查看我帖子的编辑部分...我的文件夹太多,我已将libqsqlmysql.dylib 复制到所有文件夹中,但仍然出现错误! :|
  • 它们只需要对 Qt 是“可见的”,这通常意味着 Qt 所在的任何工作路径(所以 QtSDK//)。如果你有它们并且仍然很痛苦,尝试将它作为 SQLITE 加载,看看它是插件/sqldrivers 的全局问题还是 MySQL 插件的问题。
  • 不,在将 .dylib 文件放入所有文件夹后,我仍然无法理解。该死的Qt!
【解决方案2】:

首先下载Qt SDK源码和一个版本的mysql服务器源码,解压。

创建指向 MySQL 的 lib 文件的符号链接:

sudo ln -s /Users/simon/Downloads/mysql-5.6.11-osx10.7-x86_64/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.dylib
sudo ln -s /Users/simon/Downloads/mysql-5.6.11-osx10.7-x86_64/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient_r.dylib
sudo ln -s /Users/simon/Downloads/mysql-5.6.11-osx10.7-x86_64/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
sudo ln -s /Users/simon/Downloads/mysql-5.6.11-osx10.7-x86_64/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient_r.18.dylib

之后cd 将您提取的Qt SDK 放入文件夹/Users/simon/Downloads/qt-everywhere-opensource-src-4.8.4/src/plugins/sqldrivers/mysql

构建库:

qmake -spec macx-g++ -o Makefile "INCLUDEPATH+=/Users/simon/Downloads/mysql-5.6.11-osx10.7-x86_64/include" "LIBS+=-L/usr/lib -lmysqlclient_r" mysql.pro
make
mv libqsqlmysql_debug.dylib libqsqlmysql.dylib
cp -R libqsqlmysql.dylib /Developer/Applications/Qt/plugins/sqldrivers/

之后,您应该可以使用 QMYSQL 插件了。检查是否使用这行代码正确加载了库(将其放入某个构造函数中,以便在启动应用程序后立即输出):

qDebug() << QCoreApplication::libraryPaths();
qDebug() << QSqlDatabase::drivers();

例如我的输出现在看起来像这样:

("/Developer/Applications/Qt/plugins", "/Users/simon/Coding/qt4c/build-SQLtable-Desktop-Debug/SQLtable.app/Contents/MacOS") 
("QSQLITE", "QMYSQL3", "QMYSQL", "QODBC3", "QODBC", "QPSQL7", "QPSQL") 

【讨论】:

  • 完美。非常感谢,你的帖子帮助很大。我在使用 Mac OS X Sierra 时遇到问题的只有一件事:在 qmake 命令中,我需要 "LIBS+=/usr/lib/libmysqlclient_r.dylib" 而不是您的 LIBS 修改才能使其正常工作。
【解决方案3】:

Mac Homebrew 中的 Qt 4 软件包可以选择将 mysql-drivers 安装为默认的 Qt 插件(这不是默认选项,这就是您缺少它的原因)。

按照此处所述下载并安装 Mac OS X Homebrew 软件:http://brew.sh

安装 homebrew 后,删除之前的 Qt4 安装。

如果您使用 brew 安装它,只需在终端上输入:

$ brew remove qt4

要使用 mysql 支持运行安装它:

$ brew install qt4 --with-mysql

而且每次您需要在 brew 中安装带有一些选项的软件包,但您不知道支持的选项时,只需键入:

$ brew options FORMULA_NAME

它会显示给定公式可用的所有构建选项。

【讨论】:

  • brew reinstall qt --with-mysql 可以处理以前安装的 QT。无需先删除。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-28
  • 2011-10-14
  • 2012-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多