精华内容
下载资源
问答
  • 用过Linux的人想必都知道Qt(不是QuickTime,呵呵)这个名称,KDE就是用Qt写的,我也是接触Linux后才认识它的。 Qt原先是奇趣科技TM(Trolltech)的产品,由Haavard Nord(Trolltech的CEO)和Eirik Chambe-Eng...

    介绍

    用过Linux的人想必都知道Qt(不是QuickTime,呵呵)这个名称,KDE就是用Qt写的,我也是接触Linux后才认识它的。

    Qt原先是奇趣科技TM(Trolltech)的产品,由Haavard Nord(Trolltech的CEO)和Eirik Chambe-Eng(Trolltech的董事长)于1991年开始它的历史,三年后他们创建了QuasarTechnologies公司,后改名为Trolltech,其发展与KDE的发展紧密关联,可以说早期时每个KDE版本的发布都是Qt的一个里程碑事 件。之所以叫Qt,据说是因为字母“Q”在Haavard的Emacs所用的字体中很PP -_-!,而字母“t”是toolkit的意思。

    Haavard和Eirik要开发Qt的起因是当时他们正在做一个项目(1991),必需在Unix、Macintosh和Windows环境下运 行。那个夏季的一天,Haavard和Eirik出去散步,当他们坐在一个公园长凳上时,Haavard说,“我们需要一个面向对象的显示系统。”。这次 讨论的结果为他们即将创建的跨平台GUI框架埋下了伏笔。

    1991年,在设计上与Eirik合作,Haavard开始写了一些类,它们后来成为Qt。在这年的接下来时间里,Eirik提出了 “signals and slots”的想法,这也是Qt的一个重要特征。在这年末,在Haavard的提议下,两人一起下网开发“世界上最好的C++ GUI 框架”。

    1994对这两个年轻的程序员来说是不幸的,没有一个客户,手头还是一个未完成的项目,没有钱。幸运的是,他们的妻子都有工作,可以支持他们(感动 啊!!)。之后感谢与Haavard的一个大学时候的教授的联系,一家公司给了他们用Qt开发运行在Unix和Windows上的软件的机会。终于在 1995年5月20号,Qt 0.90发布了,这是Qt的第一个公开发行版。

    之后还有很多故事,如Qct KDE组织的成立,KDE和Gnome的PK,Qt协议的变更,及Qt的几个重要发行版,Nokia收购Qt,Qt支持LGPL协议等,就不介绍了。已经 有点跑题了,介绍就到这...

     

    为什么用Qt

    如果就写跨平台的程序,Qt是一个很好的选择,当然还有很好其它的GUI库,如wxWidgets、gtk等。我选择Qt主要是因为程序简单,可拓 展性强,代码思路清晰,文档强悍!一般写GUI,如果用到新的class都是再查文档、看例程的,而这点用起来比MFC方便、灵活。用MFC写程序不舒服 的地方时,很好时候代码是用向导生成的,MSDN中对于GUI的class的例程不够多。例程充足,这样代码完全可以自己写,这样条理就清楚了。

     

    安装与编译

    1. Commercial Edition

    如果你用的是商业版本,那只要选择好对应开发平台的就可以了,如vs2005sp1的,安装下就可以了,连带Visual Studio Addon,连编译都省了。

    2. Open-Source Edition

    官方有提供MinGW下的安装版本,可以选择连带的Qt Creator。这个IDE比较赞的,支持一些简单的自动代码补全,可以方便的查看Doc。还提供了git、svn等版本控制工具的集成支持,当然还有 Qt Designer、Qt Linguist的集成。

    如果用在VS2005/2008中使用,就只是自己动手编译了。编译过程很简单,下面假设IDE是VS2005,操作如下:

     

    简单编译

    a. 下载Qt原代码包,如qt_4.5.1_opensource.zip,解压到一个剩余空间大于3.5G的分区。

    b. 设置系统环境变量:

    QTDIR —— 刚刚解压的Qt根目录,

    添加%QTDIR%\bin到Path,

    QMAKESPEC ——win32-msvc2005

    c. 打开VS的Command Prompt,输入:

    > configure

    > nmake

    编译大约要2-4小时,编译结果占3.5G左右。

     

    自定义编译

    从上面的c步骤开始:

    c. 打开VS的Command Prompt,输入:

    > configure --help

    查看configure的可以使用的选项

    我自己可能会用的:

    -release     编译release版本

    -debug          编译debug版本

    -debug-and-release  两个版本都编译

    -shared         编译dll版本

    -static         编译静态链接库版本

    -fast           configure时只生成目录级的Makefile

    -no-qt3support      不支持Qt3

    -qt-libjpeg     用Qt的jpeg解码,用system-jpeg时,软件发布到其它电脑上时jpg解码出问题了

    -vcproj         生成vs2005的vcproj工程文件,方便以后,一般不用,占地方

    -phonon         视频播放支持,需要DirectShow(DShow)

    -direct3d       direct3d支持,需要D3D SDK

    注意:

    用-phonon和-direct3d选项时,需要在之前设置环境变量,参与Qt的Readme。

    DShow安装比较麻烦,因为MS已经停止DShow的支持了,取而代之的是Media Foundation,在Vista和Win7中开始应用。DShow的最后版本环境是D3D2005 SDK和Direct Show包,好像还要Windows SDK 2003云云,配置过,记不清楚了。

    d. 修改Qt如果不想编译的部分

    如不想编译examples目录下的文件,打开$(QTDIR)\examples\Makefile,修改为(添加skip-all和 skip-qmake两行)

    all:

    skip-all:

        D:\Qt\4.5.2-vs2008sp1\bin\qmakeD:/Qt/4.5.2-vs2008sp1/examples\examples.pro -o Makefile -spec win32-msvc2008

        nmake -f Makefile

    first: all

    qmake:

    skip-qmake:

        D:\Qt\4.5.2-vs2008sp1\bin\qmakeD:/Qt/4.5.2-vs2008sp1/examples\examples.pro -o Makefile -spec win32-msvc2008

    这样编译都这里时就直接跳过了,注意设置时要慎重,一些目录下的代码可能是编译基本库文件所需要的,特别是src目录下的。如果你不想生成 qdemo.exe可以相仿地修改$(QTDIR)\demos\Makefile文件。

    e. 编译后的清理

    如果你打算以后动不再修改编译选项的话,又对Qt临时文件占地方不舒服的话,可以清理一些临时文件,最终可以减小到800M左右。

    清理bin下除*.pdb和*.dll外的临时文件,注意临时文件指的是编译生成的文件,如*.obj、*.ilk之类的文件

    清理lib下除*.prl和*.lib外的临时文件,*.prl不知道有什么用,反正小,就留着吧。

    清理src下除vc[n].pdb外的临时文件,如vs2005是vc80.pdb而vs2008是vc90.pdb。

    tools、plugin和qmake目录类似

    配置VS2005

    1. Qt Visual StudioAdd-in

    Qt官方下载:http://qt.nokia.com/downloads/visual-studio-add-in

    主要提供VS2005/2008的集成,如调用Designer、Linguist和一些帮助,还有修改Debug信息显示方式,使Debug时数 据显示更直观。

     

    2. 好像没有了。。。

    使用Qt写程序

    1. 唯美主义 - 不使用Designer

    我个人常用的方法,这样怎么开始Qt工程呢?

    新建个目录,如hi_qt,再新建个文件main.cpp,生成工程文件hi_qt.pro

    qmake -project

    生成VS工程文件hi_qt.vcproj:

    qmake -tp vc

    打开hi_qt.vcproj,菜单Qt->Convert project to Qt Add-in project,这样就可以用Qt VS Add-in的功能新建Qt class了。

    2. 一般方法

    就是直接用Qt VS Add-in 的导向了,不爽的是一定要生成ui文件和qrc文件,当然你也可以事后删除它们,这个就不多说了。

    3. 让Designer做大部分工作

    主要是结合Qt VS Add-in和Designer完成大部分界面工作,如在界面中插入自己定义的Widget,写Style Sheet等。这个说起来比较复杂,不多说了,一般用得不多,以后有时间再慢慢整理。

     

    参考

    C++ GUI Programming withQt 4, 2006, A Brief History of Qt

    Qt Assistant 4.5.2

    Qt Home

    初涉 Windows Mobile下的QT程序移植和部署

    http://www.cnblogs.com/bingcaihuang/archive/2010/12/07/1898661.html

    分类: Qt-安装与编译

    qmake生成VS的vcproj/sln工程文件

    qmake 生成的vs工程与环境变量中的 qmakespec相关,可以有两种方法:

    1.默认情况下,即环境变量qmakespec为你装的qt for vs的版本,默认生成的为该版本的vs工程,如,你装的是QT for vs2010,那么环境变量qmakespec=win32-msvc2010,默认情况下生成的是vc2010的工程。

      当你的xx.pro的TEMPLATE = subdirs时:用qmake -r -tp vc xx.pro 生成sln。

      其他情况下用:qmake -tp vc xx.pro或qmake -t vcapp xx.pro 生成vcxproj

    2.生成指定版本的VS工程  在上面的命令中加入 -spec win32-msvc2008即可。

    例如:qmake -spec win32-msvc2008 -r -tp vc xx.pro 递归的生成sln工程。

    如果是要生成2005工程的话,那么命令就是qmake -spec win32-msvc2005 -r -tp vc xx.pro

    当你机器上装有多个Qt版本的话,注意你的Qt版本与Vs的版本匹配性,如果你Vs内嵌的是Qt4.5的话,那么你qmake命令指定的就是你Qt4,.5\bin里面的qmake.exe,不要弄错。

    转自:https://blog.csdn.net/devil_box/article/details/41345179

     

    Qt工程转换成VS工程

    标签: 工程转换VS

     

     

     

    版权声明:本文为博主原创文章,未经博主允许不得转载。

    在windows下,运行Qt Command Prompt。

    输入命令行:

    qmake -tp vc XXX.pro

    会生成文件XXX.vcxproj

     

    Visual Studio的project转成QT Creator

     

    project

     

    本人QT生手,最近项目上却有个需求,要将原本的Visual Studio的project转成QT Creator的project。在进行了一番研究和动手实践以及再研究再实践之后,终于成功完成了这一转换,特此记录。

    环境:

    - Visual Studio 2013 (Ultimate)

    - QT 5.5 Community

    - 原本的VS工程是一个生成dll的工程

    - 原本的VS工程其实是基于QT Template的工程

     (安装了QT的VS插件,就可以在VS里建立基于QT template的工程。但是这里又有故事了。对于Visual Studio 2013,插件(add-in)已经不再是推荐的方式,推荐的方式叫做package或extension。所以一旦你安装了QT的插件(往往是2012版的),再想卸载它就无比困难了,就连MSDN上也没能写一个很清晰的解决方案,而网上的解决方案多为修改注册表,笔者没有试过,不知道能否卸载干净。)

     

    以上谈.pro文件的时候还谈到了qmake,那么它是什么呢?为何说.pro文件是为了跨平台而写的呢?原来,qmake是Trolltech公司(于2008年被诺基亚收购)创建的用来为不同的平台和编译器书写Makefile的工具。手写Makefile是比较困难并且容易出错的,尤其是需要给不同的平台和编译器组合写几个Makefile。使用qmake,开发者创建一个简单的“项目”文件(即.pro文件)并且运行qmake生成适当的Makefile。qmake会注意所有的编译器和平台的依赖性,可以把开发者解放出来只关心他们的代码。Trolltech公司使用qmake作为Qt库和Qt所提供的工具的主要连编工具。

    那么了解了qmake和.pro文件的写法之后,再来看看我的转换历程吧。

    第一步,因为原Visual Studio工程就是基于QT Template的工程,所以我们可以用VS里的QT插件里的"Create basic .pro file..."菜单选项来自动生成一个.pro文件,实际上,不仅仅生成了.pro 文件,还生成了.pri文件。但是目前的.pro文件还是不能用的,因为其中还有大量的配置需要修改,比如INCLUDEPATH和LIBS. 

    第二步,修改.pro文件使其包含正确而必要的配置信息。

    总结笔者对.pro文件的具体修改如下:

    1. TEMPLATE = lib

    2. 将DESTDIR =  xxx改成:

        Release:DESTDIR = xxx/Release

        Debug:DESTDIR = xxx/Debug

    3. CONFIG += debug_and_release

    4. 完善INCLUDEPATH

    5. 完善DEPENDPATH (这里又有故事了:事后笔者发现,只要在LIBS里写了-L"<LIBPATH>",就没必要写DEPENDPATH了。)

    6. 加上 Release:DEPENDPATH 和 Debug:DEPENDPATH

    7. 类似的,完善LIBS,添加Release:LIBS和Debug:LIBS

    第三步,双击改好的.pro文件,QT Creator打开此工程,选中合适的Kit,就可以build了。因为是64位机器,Kit选的是QT 5.5.1的msvc2013_64. 

    最后千万要注意的是,在系统环境变量%PATH%里,对于Visual Studio的编译器cl.exe和链接器link.exe, 要选对路径。比如,对于64位的机器,路径 C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\amd64 应该被加到%PATH%中,而不是 C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin 这一条在前一篇博文中已有详细阐述。

    以上步骤做完后,就可以顺利地在QT Creator中进行build了。

    最后还要提醒的一点是,如果更改了.pro文件,想让更改生效,必须手动删除qmake生成的Makefile, Makefile.Debug和Makefile.Release文件。

    下面是一个.pro文件的实例:

    [plain] view plain copy 

    1. TEMPLATE = lib  

    2. TARGET = MyProject  

    3. Release:DESTDIR = ../../../Output/x64/Release  

    4. Debug:DESTDIR = ../../../Output/x64/Debug  

    5. QT += core qml  

    6. CONFIG += debug_and_release  

    7. DEFINES += WIN64 QT_DLL QT_QML_LIB MyProject_LIB  

    8.   

    9. INCLUDEPATH += ./GeneratedFiles \  

    10.     . \  

    11.     ./GeneratedFiles/Release \  

    12.     $$(VC_INCLUDE) \  

    13.     $$(VC_INCLUDE)/../atlmfc/include \  

    14.     $$(WINSDK_INCLUDE)/shared \  

    15.     $$(WINSDK_INCLUDE)/um  

    16.   

    17. DEPENDPATH += . \  

    18.     $$(WINSDK_LIB)/um/x64 \  

    19.     $$(VC_LIB)/amd64 \  

    20.     $$(QTDIR)/lib \  

    21.     $$(QTDIR)/bin \  

    22.   

    23. Release:DEPENDPATH +=  ../../../3rd_library/opencv/libs/Release/x64 \  

    24.     ../../../3rd_library/DirectShow/baseclasses/x64/Release  

    25.   

    26. Debug:DEPENDPATH += ../../../3rd_library/opencv/libs/Debug/x64 \  

    27.     ../../../3rd_library/DirectShow/baseclasses/x64/Debug  

    28.   

    29. MOC_DIR += ./GeneratedFiles/release  

    30. OBJECTS_DIR += release  

    31. UI_DIR += ./GeneratedFiles  

    32. RCC_DIR += ./GeneratedFiles  

    33.   

    34. Release:LIBS += -L"../../../3rd_library/DirectShow/baseclasses/x64/Release" \  

    35.     -lstrmbase \  

    36.     -L"../../../3rd_library/opencv/libs/Release/x64" \  

    37.     -lqtmain \  

    38.     -lQt5Qml \  

    39.     -lQt5Core \  

    40.     -lopencv_calib3d248 \  

    41.     -lopencv_contrib248 \  

    42.     -lopencv_core248 \  

    43.     -lopencv_features2d248 \  

    44.     -lopencv_flann248 \  

    45.     -lopencv_gpu248 \  

    46.     -lopencv_highgui248 \  

    47.     -lopencv_imgproc248 \  

    48.     -lopencv_legacy248 \  

    49.     -lopencv_ml248 \  

    50.     -lopencv_nonfree248 \  

    51.     -lopencv_objdetect248 \  

    52.     -lopencv_ocl248 \  

    53.     -lopencv_photo248 \  

    54.     -lopencv_stitching248 \  

    55.     -lopencv_superres248 \  

    56.     -lopencv_ts248 \  

    57.     -lopencv_video248 \  

    58.     -lopencv_videostab248  

    59.   

    60. Debug:LIBS += -L"../../../3rd_library/DirectShow/baseclasses/x64/Debug" \  

    61.     -lstrmbasd \  

    62.     -L"../../../3rd_library/opencv/libs/Debug/x64" \  

    63.     -lqtmaind \  

    64.     -lQt5Qmld \  

    65.     -lQt5Cored \  

    66.     -lopencv_calib3d248d \  

    67.     -lopencv_contrib248d \  

    68.     -lopencv_core248d \  

    69.     -lopencv_features2d248d \  

    70.     -lopencv_flann248d \  

    71.     -lopencv_gpu248d \  

    72.     -lopencv_highgui248d \  

    73.     -lopencv_imgproc248d \  

    74.     -lopencv_legacy248d \  

    75.     -lopencv_ml248d \  

    76.     -lopencv_nonfree248d \  

    77.     -lopencv_objdetect248d \  

    78.     -lopencv_ocl248d \  

    79.     -lopencv_photo248d \  

    80.     -lopencv_stitching248d \  

    81.     -lopencv_superres248d \  

    82.     -lopencv_ts248d \  

    83.     -lopencv_video248d \  

    84.     -lopencv_videostab248d  

    85.   

    86. LIBS += -L"$$(WINSDK_LIB)/um/x64" \  

    87.     -L"$$(VC_LIB)/amd64" \  

    88.     -L"$$(QTDIR)/lib" \  

    89.     -L"$$(QTDIR)/bin" \  

    90.     -lWtsapi32 \  

    91.     -lPathcch \  

    92.     -l3DScanningEngine \  

    93.     -lUserenv \  

    94.     -lwinmm \  

    95.     -lMf \  

    96.     -lMfplat  

    97.   

    98. include(MyProject.pri)  


    在实际build的过程中,笔者又发现QT是调用jom.exe去做的。这是个什么呢?原来,在VS里面,有一个工具叫做nmake,它和Linux上的make很像。但是这个nmake有一个缺点(笔者不确定现在还有没有这个缺点,但在2009年的时候是有的),就是它无法利用多核的优势并行编译。于是,就有人写了这么一个叫做jom的工具,类似于是多线程版本的nmake. 最初的那篇介绍jom的文章在这里: http://blog.qt.io/blog/2009/03/27/speeding-up-visual-c-qt-builds/

    展开全文
  • 文章目录1 问题 1 问题 最开始是使用Qt Creator的mysql驱动,结果和qmake的版本不一致,出错 Cannot mix incompatible Qt library (version 0x50c01) with this library (version 0x50c02) ...然后自己编译mysql源代...

    1 问题(编译msyql动态链接库)

    最开始是使用Qt Creator的mysql驱动,结果和qmake的版本不一致,出错

    Cannot mix incompatible Qt library (version 0x50c01) with this library (version 0x50c02)
    

    解决版本:下载qt源代码(最好是下载的就包括Sources,里面就是源代码)
    在这里插入图片描述
    然后自己编译mysql源代码,首先尝试过打开mysql文件夹里的pro,路径是:/Users/macbookpro/Qt5.14.1/5.14.1/Src/qtbase/src/plugins/sqldrivers/mysql,在里面添加

    INCLUDEPATH += "/usr/local/mysql-8.0.19-macos10.15-x86_64/include"
    LIBS += -L/usr/local/mysql-8.0.19-macos10.15-x86_64/lib -llibmysqlclient.21
    DESTDIR = "/Users/macbookpro/Qt5.14.1/5.14.1/Src/qtbase/src/plugins/sqldrivers/plugins/sqldrivers"
    

    但是由于文件权限原因:

    在这里插入图片描述

    error: Cannot write file /mkspecs/modules-inst/qt_plugin_qsqlmysql.pri: Cannot create parent directory
    

    在看了Qt论坛的解决办法后,把qbase文件夹移动到下载里面,也就是:/Users/macbookpro/Downloads/work/qtbase里面。

    其实可以直接在文件夹里(我的路径是:/Users/macbookpro/Qt5.14.1/5.14.1/Src/qtbase/src/plugins/sqldrivers/mysql)使用qmake编译:
    如果遇到
    在这里插入图片描述
    解决办法:使用文本编译器打开.pro文件,然后把QMAKE_USE += mysql注释了,也就是#QMAKE_USE += mysql,然后再次编译问题解决。

    编译代码如下(其中make:编译,make install:安装
    【make是用来编译的,它从Makefile中读取指令,然后编译。make install是用来安装的,它也从Makefile中读取指令,安装到指定的位置。】):
    在这里插入图片描述

    最后终于成功了,编译后的文件路径:/usr/local/Cellar/qt/5.14.1/plugins/sqldrivers/libqsqlmysql.dylib
    铛铛铛,编译文件成功。
    在这里插入图片描述

    不容易呀!!

    弄了三天才编译好。widnows都有现成的lib和dll库,但是mac就是不行。。。

    2 连接动态库

    编译好了,但是使用连接动态库的时候,却遇到了问题:
    在这里插入图片描述
    在项目里添加环境变量QT_DEBUG_PLUGINS,值为1,也就是蓝色部分【目的是为了打印插件信息】,如下:在这里插入图片描述
    再次运行程序:

    #include <QApplication>
    #include <QSqlDatabase>
    #include <QDebug>
    #include <QStringList>
    
    int main(int argc, char** argv){
        QApplication a(argc, argv);
        qDebug()<<"drives: ";
    
        QStringList drivers = QSqlDatabase::drivers();  //获取现在可用的数据库驱动
        foreach(QString driver, drivers)
            qDebug() << driver;
        QSqlDatabase database = QSqlDatabase::addDatabase("QMYSQL");
        return  a.exec();
    }
    
    

    显示插件详细信息:
    在这里插入图片描述
    也就是mysql的dylib动态库加载失败,

    下面进入动态库的位置:

    ~ cd /usr/local/Cellar/qt/5.14.1/plugins/sqldrivers
    ➜  sqldrivers ls
    libqsqlite.dylib   libqsqlmysql.dylib libqsqlodbc.dylib  libqsqlpsql.dylib
    

    然后运行:

    otool -L libqsqlmysql.dylib
    

    打印动态库的连接信息,显示结果为:
    在这里插入图片描述
    通过仔细观察,发现@rpath/libmysqlclient.21.dylib (compatibility version 21.0.0, current version 21.0.0)这个路径根本不存在,于是,运行:install_name_tool -change @rpath/libmysqlclient.21.dylib /usr/local/mysql-8.0.19-macos10.15-x86_64/lib/libmysqlclient.21.dylib libqsqlmysql.dylib,作用是更改dylib库中连接地址,把连接地址@rpath/libmysqlclient.21.dylib (compatibility version 21.0.0, current version 21.0.0)改为/usr/local/mysql-8.0.19-macos10.15-x86_64/lib/libmysqlclient.21.dylib

    然后再次运行otool -L libqsqlmysql.dylib,显示:
    在这里插入图片描述
    这说明连接成功。

    最后再次运行程序,
    在这里插入图片描述
    说明连接成功。哈哈mac连接mysql驱动,再次终于圆满结束。

    3 收获

    • 1 遇到问题,多去Qt官方论坛https://forum.qt.io/categories。
    • 2 下载Qt(http://download.qt.io/archive/qt/)的时候,选择一定要把Soureces勾选上,也就是Qt源代码,方便以后编译。
    • 3 清楚了Qt的build环境的配置以及动态连接库。

    4 福利

    widows和mac的mysql驱动地址:
    链接:https://pan.baidu.com/s/1PLbwIKIC4mn77AYbh6e3Ew 密码:4293

    连接mac上mysql环境的代码:

        //连接xampp
        QSqlDatabase database = QSqlDatabase::addDatabase("QMYSQL");
        database.setHostName("192.168.64.2");//127.0.0.1
        database.setPort(3306);
        database.setUserName("root");
        database.setPassword("");
    
        database.setDatabaseName("majiang"); //这个库是存在的
        if (database.open()) {
            qDebug() << "连接 NAS 数据库成功";
        } else {
            qDebug() << "连接 NAS 数据库失败";
        }
        
        //连接mamp
        QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
        db.setHostName("127.0.0.1");
        db.setUserName("root");
        db.setPassword("root");
        db.setPort(8889);
        db.setDatabaseName("majiang");
        
    //   db.setDatabaseName("majiang"); //这个库是存在的
        if (db.open()) {
            qDebug() << "连接 NAS 数据库成功";
        } else {
            qDebug() << "连接 NAS 数据库失败";
        }
    
    展开全文
  • Ubuntu16.04 gcc5.4.0编译Qt5.8 beta版时,如下错误 painting/qdrawhelper.cpp: In function ‘void blend_transformed_tiled_argb(int, const QSpan*, void*)’: painting/qdrawhelper.cpp:4846:13: ...

    使用./configure -prefix /opt/Qt-5.6 -gstreamer 1.0  make  make install 编译后,qml audio可以播放mp3了,也就是qtmutimedia已经使用 gstreamer 1.0了,但是qml界面只能显示英文,所有中文汉字都不显示了。

    静态编译命令: ./configure -static -prefix /opt/Qt-5.8-static -gstreamer 1.0 -fontconfig

    ./configure -prefix /opt/Qt-5.6 -gstreamer 1.0 -fontconfig

    make -j4

    FontConfig ............. no

    sudo apt install libfontconfig1-dev
    FontConfig ............. Yes

    http://doc.qt.io/qt-5/qt-embedded-fonts.html

    解释:Qt normally uses fontconfig to provide access to system fonts. Iffontconfig is not available, e.g. in dedicated embedded systems where space is at a premium, Qt will fall back to using QBasicFontDatabase. In this case, Qt applications will look for fonts in Qt's lib/fonts/ directory. Qt will automatically detect prerendered fonts and TrueType fonts.

    如果fontconfig 是 no,Qt就不能使用系统字体,只能使用lib/fonts 目录下的字体,没提供汉字字体,因此qml界面的汉字无法显示。

    关于-qt-xcb选项的解释:It's possible to configure Qt with -qt-xcb, which compiles in a set of xcb helper libraries instead of trying to link against the system versions. This can help make Qt less dependent on some of the xcb helper libraries that might not be available on all distributions. The table specifies which dependencies are provided by -qt-xcb. 资料来源:http://doc.qt.io/qt-5/linux-requirements.html

     

    Ubuntu16.04 gcc5.4.0编译Qt5.8 beta版时,如下错误

    painting/qdrawhelper.cpp: In function ‘void blend_transformed_tiled_argb(int, const QSpan*, void*)’:
    painting/qdrawhelper.cpp:4846:13: internal compiler error: Segmentation fault
     static void blend_transformed_tiled_argb(int count, const QSpan *spans, void *u

                 ^

    Please submit a full bug report,
    with preprocessed source if appropriate.
    See <file:///usr/share/doc/gcc-5/README.Bugs> for instructions.
    Makefile:46611: recipe for target '.obj/qdrawhelper.o' failed
    make[3]: *** [.obj/qdrawhelper.o] Error 1

    搜索后,初步判定是gcc编译器bug 

    Ubuntu 安装最新的gcc https://gist.github.com/application2000/73fd6f4bf1be6600a2cf9f56315a2d91

    These commands are based on a askubuntu answer http://askubuntu.com/a/581497
    To install gcc-6 (gcc-6.1.1), I had to do more stuff as shown below.
    USE THOSE COMMANDS AT YOUR OWN RISK. I SHALL NOT BE RESPONSIBLE FOR ANYTHING.
    ABSOLUTELY NO WARRANTY.

    If you are still reading let's carry on with the code.

    sudo apt-get update && \
    sudo apt-get install build-essential software-properties-common -y && \
    sudo add-apt-repository ppa:ubuntu-toolchain-r/test -y && \
    sudo apt-get update && \
    sudo apt-get install gcc-snapshot -y && \
    sudo apt-get update && \
    sudo apt-get install gcc-6 g++-6 -y && \
    sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-6 60 --slave /usr/bin/g++ g++ /usr/bin/g++-6 && \
    sudo apt-get install gcc-4.8 g++-4.8 -y && \
    sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 60 --slave /usr/bin/g++ g++ /usr/bin/g++-4.8;

    When completed, you must change to the gcc you want to work with by default
    sudo update-alternatives --config gcc

    To verify if it worked. Just type in your terminal
    gcc -v

    If everything went fine you should see gcc 6.1.1  by the time I am writing this gist

    Happy coding!

    gcc升级到6.2.0后编译通过 

    转载于:https://my.oschina.net/lieefu/blog/755790

    展开全文
  • 文章目录1 问题(编译msyql动态链接库)2 连接动态库3 收获4 福利1 问题(编译msyql动态链接库)最开始是使用Qt Creator的mysql驱动,结果和qmake的版本不一致,出错Cannot mix incompatible Qt library (version 0x50c...

    文章目录

    1 问题(编译msyql动态链接库)

    2 连接动态库

    3 收获

    4 福利

    1 问题(编译msyql动态链接库)

    最开始是使用Qt Creator的mysql驱动,结果和qmake的版本不一致,出错

    Cannot mix incompatible Qt library (version 0x50c01) with this library (version 0x50c02)

    解决版本:下载qt源代码(最好是下载的就包括Sources,里面就是源代码)

    823d92dadf554dd971acba14cb949edf.png

    然后自己编译mysql源代码,首先尝试过打开mysql文件夹里的pro,路径是:/Users/macbookpro/Qt5.14.1/5.14.1/Src/qtbase/src/plugins/sqldrivers/mysql,在里面添加

    INCLUDEPATH += "/usr/local/mysql-8.0.19-macos10.15-x86_64/include"

    LIBS += -L/usr/local/mysql-8.0.19-macos10.15-x86_64/lib -llibmysqlclient.21

    DESTDIR = "/Users/macbookpro/Qt5.14.1/5.14.1/Src/qtbase/src/plugins/sqldrivers/plugins/sqldrivers"

    但是由于文件权限原因:

    23e5c81742d8b4323ee7a14b4e172d55.png

    error: Cannot write file /mkspecs/modules-inst/qt_plugin_qsqlmysql.pri: Cannot create parent directory

    在看了Qt论坛的解决办法后,把qbase文件夹移动到下载里面,也就是:/Users/macbookpro/Downloads/work/qtbase里面。

    其实可以直接在文件夹里(我的路径是:/Users/macbookpro/Qt5.14.1/5.14.1/Src/qtbase/src/plugins/sqldrivers/mysql)使用qmake编译:

    如果遇到

    c50a7c311a04fbcbeae6b8cd4f949dab.png

    解决办法:使用文本编译器打开.pro文件,然后把QMAKE_USE += mysql注释了,也就是#QMAKE_USE += mysql,然后再次编译问题解决。

    编译代码如下(其中make:编译,make install:安装

    【make是用来编译的,它从Makefile中读取指令,然后编译。make install是用来安装的,它也从Makefile中读取指令,安装到指定的位置。】):

    b70f810d9e4361024bb7520a37087b48.png

    最后终于成功了,编译后的文件路径:/usr/local/Cellar/qt/5.14.1/plugins/sqldrivers/libqsqlmysql.dylibc40707c58924403538ca9a3cc335a6f9.png

    铛铛铛,编译文件成功。

    a0d95af9312cf51c654320e4ff45af24.png

    不容易呀!!

    弄了三天才编译好。widnows都有现成的lib和dll库,但是mac就是不行。。。

    2 连接动态库

    编译好了,但是使用连接动态库的时候,却遇到了问题:

    a642af206b56797e0e9aa0d3c2b00f01.png

    在项目里添加环境变量QT_DEBUG_PLUGINS,值为1,也就是蓝色部分【目的是为了打印插件信息】,如下:cb7b082e497478cf5a8adb177fafabb2.png

    再次运行程序:

    #include

    #include

    #include

    #include

    int main(int argc, char** argv){

    QApplication a(argc, argv);

    qDebug()<

    QStringList drivers = QSqlDatabase::drivers(); //获取现在可用的数据库驱动

    foreach(QString driver, drivers)

    qDebug() << driver;

    QSqlDatabase database = QSqlDatabase::addDatabase("QMYSQL");

    return a.exec();

    }

    显示插件详细信息:

    18a3c998346ef431f31819a2daca489a.png

    也就是mysql的dylib动态库加载失败,

    下面进入动态库的位置:

    ➜ ~ cd /usr/local/Cellar/qt/5.14.1/plugins/sqldrivers

    ➜ sqldrivers ls

    libqsqlite.dylib libqsqlmysql.dylib libqsqlodbc.dylib libqsqlpsql.dylib

    然后运行:

    otool -L libqsqlmysql.dylib

    打印动态库的连接信息,显示结果为:

    9c4616465726a1202083b614b34202ff.png

    通过仔细观察,发现@rpath/libmysqlclient.21.dylib (compatibility version 21.0.0, current version 21.0.0)这个路径根本不存在,于是,运行:install_name_tool -change @rpath/libmysqlclient.21.dylib /usr/local/mysql-8.0.19-macos10.15-x86_64/lib/libmysqlclient.21.dylib libqsqlmysql.dylib,作用是更改dylib库中连接地址,把连接地址@rpath/libmysqlclient.21.dylib (compatibility version 21.0.0, current version 21.0.0)改为/usr/local/mysql-8.0.19-macos10.15-x86_64/lib/libmysqlclient.21.dylib。

    然后再次运行otool -L libqsqlmysql.dylib,显示:

    64a23d98069b75d98578853d57bf2fd6.png

    这说明连接成功。

    最后再次运行程序,

    82546ee96551b65a91a39a46b37f0d42.png

    说明连接成功。哈哈mac连接mysql驱动,再次终于圆满结束。

    3 收获

    1 遇到问题,多去Qt官方论坛https://forum.qt.io/categories。

    2 下载Qt(http://download.qt.io/archive/qt/)的时候,选择一定要把Soureces勾选上,也就是Qt源代码,方便以后编译。

    3 清楚了Qt的build环境的配置以及动态连接库。

    4 福利

    widows和mac的mysql驱动地址:

    链接:https://pan.baidu.com/s/1PLbwIKIC4mn77AYbh6e3Ew 密码:4293

    连接mac上mysql环境的代码:

    //连接xampp

    QSqlDatabase database = QSqlDatabase::addDatabase("QMYSQL");

    database.setHostName("192.168.64.2");//127.0.0.1

    database.setPort(3306);

    database.setUserName("root");

    database.setPassword("");

    database.setDatabaseName("majiang"); //这个库是存在的

    if (database.open()) {

    qDebug() << "连接 NAS 数据库成功";

    } else {

    qDebug() << "连接 NAS 数据库失败";

    }

    //连接mamp

    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");

    db.setHostName("127.0.0.1");

    db.setUserName("root");

    db.setPassword("root");

    db.setPort(8889);

    db.setDatabaseName("majiang");

    // db.setDatabaseName("majiang"); //这个库是存在的

    if (db.open()) {

    qDebug() << "连接 NAS 数据库成功";

    } else {

    qDebug() << "连接 NAS 数据库失败";

    }

    展开全文
  • 自己编译Qt5,用的QtCreator,可以编译程序都没问题,就是没有文档…… 是要加什么编译参数吗? [img=https://img-bbs.csdn.net/upload/201307/23/1374569277_334650.jpg][/img]
  • 之前使用师兄移植好的QT环境进行QT程序开发,对移植的难度没有充分的认识。今天有些空闲时间,就在网上查了一些资料,对nokia新出的QT4.6.2进行了移植。在这里感谢arm9之家的各位老大,在国内做移植最好的团队果然...
  • linux 编译QT的mysql驱动

    千次阅读 2018-01-10 11:20:38
    主要是要在阿里云上跑用QT写的服务器,但是运行的时候提示需要mysql驱动,只好自己编译qt的mysql驱动。 一开始编译QT的源码发现默认选项的sql只有sqllite.so,但是我需要的是mysql的动态库,这样就要自己编译了。 ...
  • 编译QtWebEngine模块支持音视频播放

    千次阅读 2020-03-21 15:40:46
    由于QT自带的QtWebEngine模块不支持音视频的播放,如果想播放MP3、MP4等格式的文件,必须自己编译QtWebEngine。 本文编译的QT版本为5.12.4,存放路径为C:\Qt\Qt5.12.4\5.12.4\msvc2017_64 本文默认编译的是64位版本...
  • 配置编译qt源码 复制以下脚本内容,保存为xxx.sh xxx代表脚本名称,自己定义 #!/bin/sh PLATFORM=linux-arm-qt #定义编译后安装--生成的文件,文件夹位置路径 INSTALL_PATH=$(pwd)/INSTALL #修改需要下载的源码...
  • vs 编译 Qt 源代码

    2011-11-02 20:02:00
    vs 从 2008换到 2010后,发现...因此想通过自己编译Qt来解决。 步骤: 1. 下载Qt源代码:最新版本为4.7.3,并解压。可以看到其基本目录结构,在最外面有configure.exe及configre 2. 打开: Microsoft Visual St...
  • 由于项目需要兼容 Windows xp ,所以需要自己编译 Qt 。这里大致整理一下编译的过程。 安装 ActivePerl / Python / Ruby 。 ActivePerl:http://www.activestate.com/activeperl/downloads 。我用的版本是ActiveP.....
  • 交叉编译qt4.8.5

    千次阅读 2018-12-03 00:44:40
    这篇文章主要是记录一下交叉编译qt4.8.5中遇到的一些问题,希望能给后来者提供一些参考。在编译过程中也参考过网上一些其他资料,可能是因为qt版本或者是编译环境的差异,很难说哪个资料能能够完全解决自己问题的,...
  • VS2008编译Qt4.5

    2011-09-21 16:03:09
    本文的目的是记录自己编译Qt4.5.0的过程,并将其整合到Visual studio 2008中的过程。 具体的过程分为如下的几步: //---------------------------------------------------------------------
  • 编译qt-mobility

    2012-03-27 14:36:22
     因为用到了qt-mobility,必须自己编译一下,参考列出了参考资料。     参考: 1. windows下编译qt-mobility  http://hi.baidu.com/xchinux/blog/item/0263d762fae626c5e6113ae9.html 2.编译qt-mobility...
  • 编译QT5.12.3/QT5.13.2的QtWebEngine模块 支持mp4

    千次阅读 热门讨论 2019-06-04 16:14:26
    由于qt自带的QtWebEngine模块无法播放HTML5中的mp3 mp4,需要重新编译: 下附编译好的库,不想重新编译的可以直接下载使用 ...注:这几个工具除了Pytho2需要自己安装,其他都在qt安装包里带了,pythone是自己安装后...
  • Qt3D 提供了 OpenGL 跨平台(除了 iOS)现代化 3D 渲染所需要的大量功能。现在正在努力,希望能尽快在 iOS 上支持 Qt3D。Qt3D 不仅仅能允许开发者简单...注意:编译会报错,但都是路径错误,自己改动后可编译通过,亲测。
  • 为了使用Qt的静态库,自动安装包括在线安装的QT是不包括静态库的,给发行Qt带来困难,为此需要自己动手编译Qt,以下为可以编译通过的方式,使用Win10家庭版操作系统,其他的不可以(包括,说什么字符问题) ...
  • vs编译Qt源码

    2021-03-02 17:38:09
    这么庞大并且这么多公司都认可的软件肯定有它自己的精华。 这几天想着学习qt,必然要有源码。从安装包拿到源码后,看起来始终觉得不尽兴,故摸索着编译源码,从而可以调试。 首先,我们要下载qt源码,不是安装包那种...
  • CMake编译Qt

    2010-09-16 11:21:00
    貌似有个CMake教程上说过“不要使用CMake编译Qt”,原因是Qt有自己的QMake,用CMake会费时费力,不过为了能把所有工程采用同样的编译方式,还是尝试了一下,的确很麻烦。 首先需要下载Qt SDK,因为打算用VS2010编译...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,757
精华内容 1,102
关键字:

自己编译qt